-1

I have trouble while trying insert value to sqlite on android.

This is the preview of the code

....
public class CreateSoal extends Activity{
     final DbHelper db=new DbHelper(this);
     public void onCreate(Bundle savedInstanceState) {

     ...

     btn.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {
                BuatSoal();
            }
        });

     }

     public void BuatSoal(){
         String Nama = "Anonymous";
         SimpleDateFormat df = new SimpleDateFormat("dd MMMM yyyy HH:mm:ss");
         Calendar kalender=Calendar.getInstance();
         Long tsLong = System.currentTimeMillis()/1000;
         String ts = tsLong.toString();
         String date = df.format(kalender.getTime());
         kalender.set(Calendar.MINUTE, kalender.get(Calendar.MINUTE)+90);
         String End = df.format(kalender.getTime());
         try
         {
         db.addSoal(new Soal(Nama, date, ts, End, "ON")); //this get java.lang.NullPointerException; and addSoal function is work fine
         // db.addSoal(new Soal("Nama", "date", "ts", "End", "ON")); <-- i tried to insert dump data, and still get 
         }
         catch (Exception ex)
         {
          int twk = db.rowcount("TWK",""); //this one is work
          Toast.makeText(getApplicationContext(), "cannot update " + twk, Toast.LENGTH_SHORT).show();
         }

         ...

/*
when i try to show it in toast like:
     Toast.makeText(this, twk + " \n NAMA: " + Nama + " \n Date: " + date + " \n End: " + End + " \n TS: \n" + ts , Toast.LENGTH_LONG).show();

it's show all the value of twk, Nama, date, End, & ts
*/


   }
}

my database:

public class DbHelper extends SQLiteOpenHelper {
private static final int DATABASE_VERSION = 5;

// Database Name
private static final String DATABASE_NAME = "TKD";

// tasks table name
private static final String TABLE_TWK = "TWK";
private static final String TABLE_SOAL = "Soal";

...

private static final String KEY_ID = "_id";

// tasks Table Columns names
private static final String KEY_QUES = "question";
private static final String KEY_ANSWER = "answer"; //correct option
private static final String KEY_OPTA= "opta"; //option a
private static final String KEY_OPTB= "optb"; //option b
private static final String KEY_OPTC= "optc"; //option c
private static final String KEY_OPTD= "optd"; //option d
private static final String KEY_OPTE= "opte"; //option e

//soal (tambah _id)
private static final String Key_NAMA = "NAMA";
private static final String Key_TIME = "TIME"; // format(dd MMMM yyyy HH:mm:ss)
private static final String Key_TS = "TS"; // timestamp
private static final String Key_END = "END"; // end time
private static final String Key_STATUS = "STATUS";

private SQLiteDatabase dbase;
public DbHelper(Context context) {
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
    dbase=db;
    String sql_TWK = "CREATE TABLE IF NOT EXISTS " + TABLE_TWK + " ( "
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
            + KEY_QUES + " TEXT, " 
            + KEY_ANSWER + " TEXT, "
            + KEY_OPTA + " TEXT, "
            + KEY_OPTB + " TEXT, "
            + KEY_OPTC + " TEXT, "
            + KEY_OPTD + " TEXT, "
            + KEY_OPTE + " TEXT)";
    db.execSQL(sql_TWK);
    String sql_soal = "CREATE TABLE IF NOT EXISTS " + TABLE_SOAL + " ( "
            + KEY_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " 
            + Key_NAMA + " TEXT, "
            + Key_TIME + " TEXT, " 
            + Key_TS + " TEXT, "
            + Key_END + " TEXT, " 
            + Key_STATUS + " TEXT)";
    db.execSQL(sql_soal);

    addQuestions_TWK();

    Long tsLong = System.currentTimeMillis()/1000;
    String ts = tsLong.toString();
    this.addSoal(new Soal("Nama", "date", ts, "End", "OFF")); //this one is work

    ...

}

...

public void addSoal(Soal soal){
    ContentValues values = new ContentValues();
    values.put(Key_NAMA, soal.getNAMA());
    values.put(Key_TIME, soal.getTIME());
    values.put(Key_TS, soal.getTS());
    values.put(Key_END, soal.getEND());
    values.put(Key_STATUS, soal.getSTATUS());

    dbase.insert(TABLE_SOAL, null, values);
}


public int rowcount(String table, String Con)
{
    int row=0;
    String selectQuery = "";

        selectQuery = "SELECT  * FROM " + table + " " + Con;

    SQLiteDatabase db = this.getWritableDatabase();
    Cursor cursor = db.rawQuery(selectQuery, null);
    row=cursor.getCount();
    return row;
}

....

rowcount is work, but addSoal didn't. did i miss something that cause me get NullPointerException?

error log:

08-07 03:45:04.738: E/AndroidRuntime(4562): FATAL EXCEPTION: main
08-07 03:45:04.738: E/AndroidRuntime(4562): java.lang.NullPointerException
08-07 03:45:04.738: E/AndroidRuntime(4562):     at com.tidakdijual.tkdcpns1.db.DbHelper.addSoal(DbHelper.java:217)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at com.tidakdijual.tkdcpns1.soal.CreateSoal.BuatSoal(CreateSoal.java:105)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at com.tidakdijual.tkdcpns1.soal.CreateSoal$1.onClick(CreateSoal.java:69)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at android.view.View.performClick(View.java:4240)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at android.view.View$PerformClick.run(View.java:17721)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at android.os.Handler.handleCallback(Handler.java:730)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at android.os.Handler.dispatchMessage(Handler.java:92)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at android.os.Looper.loop(Looper.java:137)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at android.app.ActivityThread.main(ActivityThread.java:5103)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at java.lang.reflect.Method.invokeNative(Native Method)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at java.lang.reflect.Method.invoke(Method.java:525)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:737)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
08-07 03:45:04.738: E/AndroidRuntime(4562):     at dalvik.system.NativeStart.main(Native Method)
08-07 03:45:09.658: E/ActivityThread(4607): Failed to find provider info for com.google.plus.platform

PROBLEM SOLVED. see Ando Masahashi's comment or laalto's comment

Owen Pauling
  • 11,349
  • 20
  • 53
  • 64
Andi R
  • 112
  • 2
  • 13
  • Please update your question with the error. – Simas Aug 06 '14 at 08:43
  • Your data base isn't initialized. See this discussion http://stackoverflow.com/questions/7444327/how-to-initialize-sqlite-database-once-from-a-helper-class-in-android – QArea Aug 06 '14 at 09:30

2 Answers2

0

Your dbase is not initialized.

Call

dbase = getWritableDatabase();

to init it.

The assignment in helper onCreate() is only run once when the database file is created and not for every time your app runs. Also, the database instance passed on there will be later closed and you cannot use it after onCreate().

laalto
  • 150,114
  • 66
  • 286
  • 303
0

look at changes in code dbase= getWritableDatabase(); first you need to access database in writable mode.

public void addSoal(Soal soal){

dbase= getWritableDatabase();   

ContentValues values = new ContentValues();
values.put(Key_NAMA, soal.getNAMA());
values.put(Key_TIME, soal.getTIME());
values.put(Key_TS, soal.getTS());
values.put(Key_END, soal.getEND());
values.put(Key_STATUS, soal.getSTATUS());

dbase.insert(TABLE_SOAL, null, values);
}
Ando Masahashi
  • 3,112
  • 2
  • 24
  • 41