访问SQLite DB时出现Android NullPointerException
我需要帮助,伙计们!我有一个错误,我已经工作了几个小时,无法解决 我有一个ListView和customadapter,ListView由本地sqlite数据库中的对象填充。我在listview的每一行上都有一个按钮,用来从数据库中删除相应的对象。但是,当点击按钮时,我会像这样查询数据库访问SQLite DB时出现Android NullPointerException,android,sqlite,Android,Sqlite,我需要帮助,伙计们!我有一个错误,我已经工作了几个小时,无法解决 我有一个ListView和customadapter,ListView由本地sqlite数据库中的对象填充。我在listview的每一行上都有一个按钮,用来从数据库中删除相应的对象。但是,当点击按钮时,我会像这样查询数据库 public Game getGame(gameid){ Long gameif = Long.parseLong(gameid); Game g = db.getGa
public Game getGame(gameid){
Long gameif = Long.parseLong(gameid);
Game g = db.getGame(gameif);
return g;
}
line Game g=db.getGame()就是给我NPE的那个。传入的gameid不为null,对数据库的引用db=newdatabasehandler(此)代码>不是空的(我不认为)
以下是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;
}
提前谢谢
编辑-这是日志
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)
单击mycustomadapter
中处理的按钮,然后启动主活动中的talktoasync()
,然后运行一个异步任务,将一些数据发送到服务器,然后根据服务器的响应代码,删除本地数据库中的记录getGame()
在asynctask的onPostExecute()
中被触发。当您访问Data acces对象时,首先需要具有和该对象的实例
->db=新的DatabaseHandler(此)
在您需要打开需要访问的数据库之后
db.open()
在处理程序中设置此代码段:
private MySQLiteHelper dbHelper;
public void open() throws SQLException {
db = dbHelper.getWritableDatabase();
}
如果不打开数据库,Android将抛出NullPointerException。打开数据库时出现问题,这会抛出exeption
有关详细信息,请参见本教程:
调试并检查您的光标是否为空,您将执行不等于空的检查,但在下一行中使用光标。请发布日志,这将帮助我们帮助您。请查看编辑!也谢谢你的帮助,我现在就开始尝试这个帖子中提到的所有技巧。