java - 调用 moveToFirst() 时光标抛出 NullPointerException

标签 java android nullpointerexception cursor

我最近在 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/

相关文章:

java - ConfigChanges 期间 ActionBar 的导航模式变化

java - 为什么我填充后得到空对象?

java - 在 EditText 中输入文本时出现 NullPointerException

java - 如何使用 XML 中的 CXF JAX-RS 和 Jackson 2 配置服务器返回的日期格式?

java - JFace应用程序窗口 : createContents isn't working

java - 使用 Spring Integration 将消息发送到套接字端口并接收响应

java - 如何从我的 Android 应用程序的所有目录中获取所有 pdf 文件

java - 明确地将类型放入菱形运算符与让 java 弄清楚之间有区别吗?

java - JCenter 弃用;对 Gradle 和 Android 的影响

java - 如何比较两个可能为空的对象?