2011-03-04 162 views
0

我有一個從我的個人SQLite數據庫填充的列表視圖,該數據庫顯示有關事件的信息。我正嘗試使用事件描述頁面上的複選框來創建一種「最喜歡」此事件的方式。代碼將嘗試更新數據庫,當用戶選中複選框,然後啓動onPause()更新SQLite數據庫的問題

我查找了更新數據庫中的行的一些示例,但無論我嘗試什麼,我似乎總是卡住帶有NullPointerException。

讓我知道是否有任何其他代碼,你需要看看來幫助我解決這個問題。

下面是當用戶從描述活動移開,看看他們是否已經檢查的複選框,我調用代碼:

@Override 
protected void onPause() { 
    super.onPause(); 
    DataBaseHelper myDbHelper = new DataBaseHelper(this); 
    if (panelCheckBox.isChecked()) { 
     int mySchedule = 1; 
     myDbHelper.updateRow(mRowId, mySchedule); 
    } 

,這裏是在DataBaseHelper

public void updateRow(long rowId, Integer mySchedule) { 
    if(mySchedule != null){ 
    ContentValues args = new ContentValues(); 
    args.put("mySchedule", mySchedule); 
    myDataBase.update(DATABASE_PANELS_TABLE, args, "_id=" + rowId, null); 
    } 
} 
的updateRow碼

以下是來自logcat的錯誤:

ERROR/AndroidRuntime(689): Uncaught handler: thread main exiting due to uncaught exception 

ERROR/AndroidRuntime(689): java.lang.RuntimeException: Unable to pause activity {com.tagrost.AndroidConventionApp/com.tagrost.AndroidConventionApp.PanelDescActivity}: java.lang.NullPointerException 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3162) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3119) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.handlePauseActivity(ActivityThread.java:3102) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.access$2400(ActivityThread.java:119) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1874) 

ERROR/AndroidRuntime(689):  at android.os.Handler.dispatchMessage(Handler.java:99) 

ERROR/AndroidRuntime(689):  at android.os.Looper.loop(Looper.java:123) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.main(ActivityThread.java:4363) 

ERROR/AndroidRuntime(689):  at java.lang.reflect.Method.invokeNative(Native Method) 

ERROR/AndroidRuntime(689):  at java.lang.reflect.Method.invoke(Method.java:521) 

ERROR/AndroidRuntime(689):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860 

ERROR/AndroidRuntime(689):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618) 

ERROR/AndroidRuntime(689):  at dalvik.system.NativeStart.main(Native Method) 

ERROR/AndroidRuntime(689): Caused by: java.lang.NullPointerException 

ERROR/AndroidRuntime(689):  at com.tagrost.AndroidConventionApp.DataBaseHelper.updateRow(DataBaseHelper.java:198) 

ERROR/AndroidRuntime(689):  at com.tagrost.AndroidConventionApp.PanelDescActivity.onPause(PanelDescActivity.java:67) 

ERROR/AndroidRuntime(689):  at android.app.Activity.performPause(Activity.java:3782) 

ERROR/AndroidRuntime(689):  at android.app.Instrumentation.callActivityOnPause(Instrumentation.java:1190) 

ERROR/AndroidRuntime(689):  at android.app.ActivityThread.performPauseActivity(ActivityThread.java:3149) 
+0

'ERROR/AndroidRuntime(689):at com.tagrost.AndroidConventionApp.DataBaseHelper.updateRow(DataBaseHelper.java:198)'哪一行是198?這應該是問題所在。 – 2011-03-04 20:29:53

+0

myDataBase.update(DATABASE_PANELS_TABLE,args,「_id =」+ rowId,null); – Tag 2011-03-04 20:34:31

+0

更大的問題是,爲什麼數據庫更新與onPause有什麼關係?打開活動並保持活動狀態時打開數據庫。單擊複選框並更新數據庫。你是否嘗試使用onPause強制重繪? – jcwenger 2011-03-04 20:46:45

回答

0

所以真正的根本原因是你的問題似乎很簡單:您創建一個新的dbHelper,但您從不顯式打開數據庫。你看起來與標準Android Notepad tutorial緊密平行。拉起來,看看如何NotesDbAdaptor包裝SQLiteOpenHelper。您需要先調用myDbHelper.open(),然後才能使用myDbHelper。

你應該做的另一個關鍵改變是按照記事本示例中所示的相同模式。你應該把db作爲一個成員變量 - 用new初始化,然後在onCreate()期間打開它。 (打開數據庫可能需要半秒的時間,最好在初始化時進行一次,而不是每次更改一次)。請參閱Notepadv1.java中的示例。

再次,這個記事本示例看起來像一個非常接近平行於你在做什麼。在教程的第2步中,他們會打開一個詳細信息頁面來編輯一個筆記,就像您打開一個詳細信息頁面,無論它是什麼。然後,第3步顯示如何使它像onPause和onResume生命週期事件強健。第一次做這件事很棘手。逐步完成正確的步驟,並適應您的情況並採取相同的行動,並且您應該儘快提取。