我需要帮助伙计们!我有一个我已经工作了几个小时但无法解决的错误。
我有一个 ListView 和 customadapter,listview 填充了来自本地 sqlite db 的对象。我在列表视图的每一行都有一个按钮,它应该从数据库中删除相应的对象。但是,当单击按钮时,我会像这样查询数据库......
public Game getGame(gameid){
Long gameif = Long.parseLong(gameid);
Game g = db.getGame(gameif);
return g;
}
这条线 Game g = db.getGame() 是给我 NPE 的那条线。传入的gameid不为空,对数据库的引用db = new DatabaseHandler(this);
不为空(我不认为)。
这是来自 DatabaseHandler 的代码:
Game getGame(Long id) {
SQLiteDatabase db = this.getReadableDatabase();
Game game= null;
System.out.println(String.valueOf(id));
Cursor cursor = db.query(TABLE_GAMES, new String[] { KEY_ID,
KEY_PLAYERNAME, KEY_PLAYERNUMBER, KEY_LASTTURN, KEY_NEXTTURN }, KEY_ID + "= ?",
new String[] { String.valueOf(id) }, null, null, null, null);
if (cursor != null){
cursor.moveToFirst();
game = new Game(Long.parseLong(cursor.getString(0)), cursor.getString(1),
Integer.parseInt(cursor.getString(2)),
cursor.getString(3), Integer.parseInt(cursor.getString(4)));
}
return game;
}
提前致谢!
编辑 - 这是 logcat。
09-29 11:06:52.843: E/AndroidRuntime(16969): FATAL EXCEPTION: main
09-29 11:06:52.843: E/AndroidRuntime(16969): java.lang.NullPointerException
09-29 11:06:52.843: E/AndroidRuntime(16969): at com.domsoft.ff.MainActivity.getGame(MainActivity.java:115)
09-29 11:06:52.843: E/AndroidRuntime(16969): at com.domsoft.ff.MainActivity.talkToAsync(MainActivity.java:71)
09-29 11:06:52.843: E/AndroidRuntime(16969): at com.domsoft.ff.GameCustomAdapter$1.onClick(GameCustomAdapter.java:72)
09-29 11:06:52.843: E/AndroidRuntime(16969): at android.view.View.performClick(View.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at android.view.View$PerformClick.run(View.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at android.os.Handler.handleCallback(Handler.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at android.os.Handler.dispatchMessage(Handler.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at android.os.Looper.loop(Looper.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at android.app.ActivityThread.main(ActivityThread.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at java.lang.reflect.Method.invokeNative(Native Method)
09-29 11:06:52.843: E/AndroidRuntime(16969): at java.lang.reflect.Method.invoke(Method.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java)
09-29 11:06:52.843: E/AndroidRuntime(16969): at dalvik.system.NativeStart.main(Native Method)
单击我处理的按钮,customadapter
然后talktoasync()
在主活动中启动,然后运行一个异步任务,它将一些数据发送到服务器,然后根据来自服务器的响应代码,应该删除本地数据库中的记录。getGame()
在异步任务中触发onPostExecute()
。