【发布时间】:2011-03-04 20:19:45
【问题描述】:
我有一个从我的个人 SQLite DB 填充的列表视图,它显示有关事件的信息。我正在尝试使用事件描述页面上的复选框创建一种“收藏”该事件的方法。当用户选中复选框然后启动 onPause() 时,代码将尝试更新数据库
我查找了一些更新数据库中行的示例,但无论我尝试什么,我似乎总是遇到 NullPointerException。
如果您需要查看任何其他代码来帮助我解决此问题,请告诉我。
这是我在用户离开描述活动时调用的代码,以查看他们是否选中了复选框:
@Override
protected void onPause() {
super.onPause();
DataBaseHelper myDbHelper = new DataBaseHelper(this);
if (panelCheckBox.isChecked()) {
int mySchedule = 1;
myDbHelper.updateRow(mRowId, mySchedule);
}
这是 DataBaseHelper 中的 updateRow 代码
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);
}
}
这是来自 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)
【问题讨论】:
-
ERROR/AndroidRuntime(689): at com.tagrost.AndroidConventionApp.DataBaseHelper.updateRow(DataBaseHelper.java:198)198 是哪一行?这应该是问题所在。 -
myDataBase.update(DATABASE_PANELS_TABLE, args, "_id=" + rowId, null);
-
一个更大的问题是,为什么数据库更新与 onPause 有任何关系?打开活动时打开数据库并使其保持不变。在您单击复选框并完成操作的那一刻更新数据库。您是否尝试使用 onPause 强制重绘?
-
我对使用 android 和 java 编程很陌生,所以我并不完全精通使用某些功能的最佳方法。至于使用 onPause() 我找不到一个很好的例子来说明如何为复选框使用监听器。
-
好吧,我错了。我没有看到这是在详细信息页面上。 onPause() 是在这种用法中执行此操作的好地方。但是,您应该始终保持数据库打开。我将展示如何:
标签: android sql sqlite nullpointerexception sql-update