我创建一个SQLiteOpenHelper的SQL数据库,我可以更新完成的数据。它显示java.lang.NullPointerException当我创建另一个类对话框
这是关于更新DatabaseHandler.java
:
//Updating single contact
public int updateContact(Contact contact) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_DATE, contact.getDate());
values.put(KEY_BMORNING, contact.getBeforeMorning());
values.put(KEY_AMORNING, contact.getAfterMorning());
values.put(KEY_BNOON, contact.getBeforeNoon());
values.put(KEY_ANOON, contact.getAfterNoon());
values.put(KEY_BNIGHT, contact.getBeforeNight());
values.put(KEY_ANIGHT, contact.getAfterNight());
//updating row
Log.d("update:", String.valueOf(contact.getID()));
return db.update(TABLE_CONTACTS, values, KEY_ID + " = ?",
new String[] {String.valueOf(contact.getID())});
}
我的代码更新数据,它的工作原理:
//Contact is my jave bean class
db.updateContact(new Contact(id, choiceDate, choiceValue, "", "", "", "", ""));
我想另一个类使用对话,所以我创造这样的:
public class DialogHandler extends AppCompatActivity{
private DatabaseHandler db = new DatabaseHandler(this);
private Context context;
public DialogHandler(Context context){
this.context = context;
}
// Alert dialog
public void updateDialog(String rightMessage, String leftMessage, final Contact contact) {
android.support.v7.app.AlertDialog.Builder builder = new android.support.v7.app.AlertDialog.Builder(context);
builder.setMessage("Data is existed")
.setPositiveButton(rightMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
db.updateContact(contact);
}
});
builder.setNegativeButton(leftMessage, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
}
});
builder.show();
}
}
然后我改变这样的更新代码:
new DialogHandler(this).updateDialog("Update", "Cancel", new Contact(id, choiceDate, choiceValue, "", "", "", "", ""));
它显示了我的错误: java.lang.NullPointerException: Attempt to invoke virtual method 'android.database.sqlite.SQLiteDatabase android.content.Context.openOrCreateDatabase(java.lang.String, int, android.database.sqlite.SQLiteDatabase$CursorFactory, android.database.DatabaseErrorHandler)' on a null object reference
,并在此代码SQLiteDatabase db = this.getWritableDatabase();
:
atcom.example.motogod19.testmysql1.DatabaseHandler.updateContact(DatabaseHandler.java:200)
,如果我为显示对话框创建DialogHandler.java
如何解决这个问题?任何帮助将不胜感激,在此先感谢。
你忘了我们展示里面'getWritableDatabase相关的代码()'... – alfasin
感谢您的回复,我有它贴在我的'updateContact'方法。 –