2011-03-04 139 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生命周期事件强健。第一次做这件事很棘手。逐步完成正确的步骤,并适应您的情况并采取相同的行动,并且您应该尽快提取。