我最近在 Play 商店中收到了一份崩溃报告,如下所示:
java.lang.NullPointerException
at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144)
at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133)
at android.database.AbstractCursor.moveToPosition(AbstractCursor.java:196)
at android.database.AbstractCursor.moveToFirst(AbstractCursor.java:236)
at com.myapp.MyActivity(MyActivity.java:283)
at java.lang.Thread.run(Thread.java:856)
起初我以为是游标为空,但不可能是因为我在调用moveToFirst()
之前检查它是否为空
mCursor = getCursorData();
if (mCursor != null)
mCursor.moveToFirst(); // Line 283
谁能告诉我它为什么会崩溃?
编辑:
上面的代码几乎是在它所包含的方法的开头。这是在 onConfigurationChanged()
中运行的,因此我可以使用光标中的新集更新 Activity 上的选项卡。
getCursorData()
是我的 SQLiteOpenHelper
中的一个方法:
我使用 rawQuery 的原因是由于使用 INNER JOIN 的实际查询。查询本身很好,因为它在几年内一直运行良好,没有抛出此异常。
public Cursor getCursorData(long userformid) {
SQLiteDatabase db = getWritableDatabase();
return db.rawQuery("SELECT * FROM table WHERE _id=?", new String[]{
String.valueOf(id)
});
}
我现在更改了我的代码以在调用 moveToFirst()
之前检查 getCount()
。我只是在等待遇到问题的用户更新到这个新版本,看看它是否有效。
最佳答案
你应该先检查数据的计数,所以使用这个:
if(mCursor!=null && mCursor.getCount()>0 ){
mCursor.moveToFirst();
}
关于java - 调用 moveToFirst() 时光标抛出 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30262002/