Mahe
Mahe

Reputation: 2737

DataBase not Created in SQLite

I Built one same app which takes the data from User. I attempted to save the data into SQLite database. When I run the app, the interface seems to be working good. But when I click on "save" button, App gets closed by giving an error "Unfortunately Application has Closed". Dont know the reason. I checked if the Database is created and found that it isn't created.

Here is My MainActivity Class.

public class WaterReadingMainActivity extends Activity 
{

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);     
    setContentView(R.layout.activity_main);

    final RelativeLayout mainLayout=(RelativeLayout)findViewById(R.id.mainLayout);
    mainLayout.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right));
    final LinearLayout readingLayout=(LinearLayout)findViewById(R.id.waterReading);
    readingLayout.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right));
    final LinearLayout pastDatePickerLayout=(LinearLayout)findViewById(R.id.PastDatePickerLayout);
    pastDatePickerLayout.startAnimation(AnimationUtils.loadAnimation(this, android.R.anim.slide_out_right));
    readingLayout.setVisibility(View.GONE);
    pastDatePickerLayout.setVisibility(View.GONE);


    Button AddWaterReading=(Button)findViewById(R.id.AddWaterReading);    //click on + button.
    AddWaterReading.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            readingLayout.setVisibility(View.VISIBLE);
            mainLayout.setVisibility(View.GONE);
            TextView txtgetCurrentDate=(TextView)findViewById(R.id.currentDate);
            final Calendar c=Calendar.getInstance();
            txtgetCurrentDate.setText((c.get(Calendar.MONTH)+1)+"/"+c.get(Calendar.DATE)+"/"+c.get(Calendar.YEAR));  

        }
    });

    TextView getPastDate=(TextView)findViewById(R.id.getDate);
    getPastDate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View arg0) {
            readingLayout.setVisibility(View.GONE);
            pastDatePickerLayout.setVisibility(View.VISIBLE);                           
        }
    });

    Button savePastDate=(Button)findViewById(R.id.savePastDate);
    savePastDate.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {

            pastDatePickerLayout.setVisibility(View.GONE);
            readingLayout.setVisibility(View.VISIBLE);

            DatePicker getPastDatepicker=(DatePicker)findViewById(R.id.getPastDate);
                int YY=getPastDatepicker.getYear();
                int MM=getPastDatepicker.getMonth();
                int DD=getPastDatepicker.getDayOfMonth();
                TextView getPastDate=(TextView)findViewById(R.id.getDate);  
                getPastDate.setText((MM+1)+"/"+DD+"/"+YY);
        }
    });


    Button saveWaterReadingToDB=(Button)findViewById(R.id.saveWaterReading);
    saveWaterReadingToDB.setOnClickListener(new View.OnClickListener() {

        @Override
        public void onClick(View v) {
            readingLayout.setVisibility(View.GONE);
             mainLayout.setVisibility(View.VISIBLE);    

             TextView getPastDate=(TextView)findViewById(R.id.getDate);
             TextView txtgetCurrentDate=(TextView)findViewById(R.id.currentDate);
             TextView txtgetWaterReading=(TextView)findViewById(R.id.water_Reading);

             SQLiteDatabase DB;
             SQLiteOpenHelper helper = null;
             DB=helper.getWritableDatabase();

             String pastDate=getPastDate.getText().toString().trim();
             String currentDate=txtgetCurrentDate.getText().toString().trim();
             String waterReading=txtgetWaterReading.getText().toString().trim();


             ContentValues values=new ContentValues();
             values.put(CreateDB.COLUMN_NAME_READING_MODE,"Water");
             values.put(CreateDB.COLUMN_NAME_PASTDATETIME, pastDate);
             values.put(CreateDB.COLUMN_NAME_CURRENTDATETIME, currentDate);
             values.put(CreateDB.COLUMN_NAME_READINGVALUE, waterReading);

             DB.insert(CreateDB.TABLE_NAME, null, values);
             Toast.makeText(getApplicationContext(), "Added", Toast.LENGTH_LONG).show();
             DB.close();
             helper.close();                 
        }
    });

  } 
  }

And CreateDB class,

    public abstract class CreateDB extends SQLiteOpenHelper
    {       
    private static final String DATABASE_NAME="WaterElectricityReading.db";
    public static final String TABLE_NAME="Reading";
    public static final String COLUMN_NAME_READING_ID="_Id";
    public static final String COLUMN_NAME_READING_MODE="ReadingMode";
    public static final String COLUMN_NAME_PASTDATETIME="PastDateTime";
    public static final String COLUMN_NAME_CURRENTDATETIME="CurrentDateTime";
    public static final String COLUMN_NAME_READINGVALUE="ReadingValue";
    private static final int DATABASE_VERSION = 1;


    public CreateDB(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);

    }

    public void onCreate(SQLiteDatabase DB){

        final String CREATE_TABLE="create table if not exists"+ TABLE_NAME + "("+ COLUMN_NAME_READING_ID +"integer primary key autoincrement,"
                +COLUMN_NAME_READING_MODE+"text not null,"+COLUMN_NAME_PASTDATETIME+"date not null,"+COLUMN_NAME_CURRENTDATETIME
                +"date not null,"+COLUMN_NAME_READINGVALUE+"integer not null"+");";
        DB.execSQL(CREATE_TABLE);                           

    }                   
}

This is my stack trace,

03-01 11:47:49.912: E/Trace(3010): error opening trace file: No such file or directory (2)
03-01 11:47:50.942: D/dalvikvm(3010): GREF has increased to 201
03-01 11:47:50.961: D/gralloc_goldfish(3010): Emulator without GPU emulation detected.
03-01 11:47:51.282: I/Choreographer(3010): Skipped 174 frames!  The application may be doing too much work on its main thread.
03-01 11:47:51.312: D/dalvikvm(3010): GC_CONCURRENT freed 149K, 9% free 3661K/3988K, paused 76ms+31ms, total 312ms
03-01 11:48:07.402: I/Choreographer(3010): Skipped 40 frames!  The application may be doing too much work on its main thread.
03-01 11:48:08.782: I/Choreographer(3010): Skipped 33 frames!  The application may be doing too much work on its main thread.
03-01 11:48:08.812: I/Choreographer(3010): Skipped 34 frames!  The application may be doing too much work on its main thread.
03-01 11:48:08.902: I/Choreographer(3010): Skipped 41 frames!  The application may be doing too much work on its main thread.
03-01 11:48:08.952: I/Choreographer(3010): Skipped 34 frames!  The application may be doing too much work on its main thread.
03-01 11:48:09.102: I/Choreographer(3010): Skipped 37 frames!  The application may be doing too much work on its main thread.
03-01 11:48:09.153: I/Choreographer(3010): Skipped 38 frames!  The application may be doing too much work on its main thread.
03-01 11:48:09.192: I/Choreographer(3010): Skipped 30 frames!  The application may be doing too much work on its main thread.
03-01 11:48:09.283: I/Choreographer(3010): Skipped 32 frames!  The application may be doing too much work on its main thread.
03-01 11:48:10.482: I/Choreographer(3010): Skipped 64 frames!  The application may be doing too much work on its main thread.
03-01 11:48:11.023: I/Choreographer(3010): Skipped 85 frames!  The application may be doing too much work on its main thread.
03-01 11:48:11.142: I/Choreographer(3010): Skipped 100 frames!  The application may be doing too much work on its main thread.
03-01 11:48:11.705: I/Choreographer(3010): Skipped 65 frames!  The application may be doing too much work on its main thread.
03-01 11:48:13.252: D/AndroidRuntime(3010): Shutting down VM
03-01 11:48:13.252: W/dalvikvm(3010): threadid=1: thread exiting with uncaught exception (group=0x2bd39930)
03-01 11:48:13.272: E/AndroidRuntime(3010): FATAL EXCEPTION: main
03-01 11:48:13.272: E/AndroidRuntime(3010): java.lang.NullPointerException
03-01 11:48:13.272: E/AndroidRuntime(3010):     at com.example.mysamplewaterreadingapp.WaterReadingMainActivity$4.onClick(WaterReadingMainActivity.java:96)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at android.view.View.performClick(View.java:4202)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at android.view.View$PerformClick.run(View.java:17340)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at android.os.Handler.handleCallback(Handler.java:725)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at android.os.Handler.dispatchMessage(Handler.java:92)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at android.os.Looper.loop(Looper.java:137)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at android.app.ActivityThread.main(ActivityThread.java:5039)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at java.lang.reflect.Method.invokeNative(Native Method)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at java.lang.reflect.Method.invoke(Method.java:511)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-01 11:48:13.272: E/AndroidRuntime(3010):     at dalvik.system.NativeStart.main(Native Method)
03-01 11:48:17.203: I/Process(3010): Sending signal. PID: 3010 SIG: 9

My activity_main.xml file,

 <?xml version="1.0" encoding="utf-8"?>
 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:id="@+id/sampleLayoutExample"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent" >

  <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:tools="http://schemas.android.com/tools"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   tools:context=".MainActivity" 
   android:id="@+id/mainLayout">

  <TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/AddWaterReading"
    android:layout_alignParentLeft="true"
    android:layout_marginLeft="24dp"
    android:text="@string/Water_Reading"
    android:textAppearance="?android:attr/textAppearanceLarge" />

  <TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignLeft="@+id/textView2"
    android:layout_below="@+id/AddWaterReading"
    android:layout_marginTop="28dp"
    android:text="@string/Electricity_Reading"
    android:textAppearance="?android:attr/textAppearanceLarge" />

  <Button
    android:id="@+id/button3"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBottom="@+id/textView1"
    android:layout_alignLeft="@+id/AddWaterReading"
    android:text="@string/Add_Electricity_Reading" />

  <Button
    android:id="@+id/AddWaterReading"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_marginLeft="30dp"
    android:layout_marginTop="40dp"
    android:layout_toRightOf="@+id/textView1"
    android:text="@string/Add_Water_Reading" />

   <Button
    android:id="@+id/AddElectricityReading"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_above="@+id/textView1"
    android:layout_marginLeft="15dp"
    android:layout_toRightOf="@+id/AddWaterReading"
    android:text="@string/btnWater_View" />

   <Button
    android:id="@+id/button4"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_alignBaseline="@+id/button3"
    android:layout_alignBottom="@+id/button3"
    android:layout_alignLeft="@+id/AddElectricityReading"
    android:text="@string/btnElectricity_View" />

 </RelativeLayout>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical" 
   android:id="@+id/waterReading">

   <TextView
    android:id="@+id/getDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/get_Date"
    android:textAppearance="?android:attr/textAppearanceLarge" />

  <EditText
    android:id="@+id/currentDate"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="date" >

    <requestFocus />
 </EditText>

  <EditText
    android:id="@+id/water_Reading"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:ems="10"
    android:inputType="number" />

  <Button
    android:id="@+id/saveWaterReading"
    android:layout_width="206dp"
    android:layout_height="wrap_content"
    android:text="@string/Save_Reading" />

 </LinearLayout>
 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" 
    android:id="@+id/PastDatePickerLayout">

  <DatePicker
    android:id="@+id/getPastDate"
    android:layout_width="374dp"
    android:layout_height="wrap_content" 
    android:calendarViewShown="false"/>

  <Button
    android:id="@+id/savePastDate"
    android:layout_width="316dp"
    android:layout_height="wrap_content"
    android:layout_gravity="bottom"
    android:text="@string/Save_Date" />

  </LinearLayout>
  </RelativeLayout>

I am new to android.Please any one help me out in solving this issue.

Thanks.

Upvotes: 1

Views: 222

Answers (2)

nano_nano
nano_nano

Reputation: 12523

your create statement is wrong, try this:

public void onCreate(SQLiteDatabase DB){

    final String CREATE_TABLE="create table if not exists "+ TABLE_NAME + "("+ COLUMN_NAME_READING_ID +" integer primary key autoincrement,"
            +COLUMN_NAME_READING_MODE+" text not null,"+COLUMN_NAME_PASTDATETIME+" date not null,"+COLUMN_NAME_CURRENTDATETIME
            +" date not null,"+COLUMN_NAME_READINGVALUE+" integer not null"+");";
    DB.execSQL(CREATE_TABLE);                           

}       

you have to insert spaces after column definition.

Your SQLiteHelper is wrong implemented. Take a look to that tutorial Vogela SQLite

You are not able to initiate an interface(only Chuck Norris can do this!).

Furthermore you are not able to initiate an abstract class CreateDB. Take a look to the tutorial. It is very good.

Upvotes: 0

Gyonder
Gyonder

Reputation: 3756

There is something wrong here:

      SQLiteDatabase DB;
      SQLiteOpenHelper helper = null;
      DB=helper.getWritableDatabase();

should be something like this:

    SQLiteOpenHelper mDbHelper = new SQLiteOpenHelper(this);
SQLiteDatabase DB= mDbHelper.getWritableDatabase();

Upvotes: 1

Related Questions