2017-06-18 68 views
-1

我创建一个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如何解决这个问题?任何帮助将不胜感激,在此先感谢。

+0

你忘了我们展示里面'getWritableDatabase相关的代码()'... – alfasin

+0

感谢您的回复,我有它贴在我的'updateContact'方法。 –

回答

1

您的DatabaseHandler需要一个上下文,尽管您只能在构造函数中获取上下文。您的IDE没有给出警告,因为您将DialogHandler扩展为AppCompatActivity,这使得它有缺陷。

private DatabaseHandler db = null; 
    private Context context; 

    public DialogHandler(Context context){ 
     this.context = context; 
     db = new DatabaseHandler(context); 
    } 
+0

感谢您的帮助,我通过您的建议解决了问题,再次感谢。 –

+0

欢迎您:) – Enzokie

相关问题