Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 调用moveToFirst()时引发NullPointerException的游标_Java_Android_Nullpointerexception_Cursor - Fatal编程技术网

Java 调用moveToFirst()时引发NullPointerException的游标

Java 调用moveToFirst()时引发NullPointerException的游标,java,android,nullpointerexception,cursor,Java,Android,Nullpointerexception,Cursor,我最近收到一份关于Play Store的崩溃报告,该报告如下所示: java.lang.NullPointerException at android.database.sqlite.SQLiteCursor.fillWindow(SQLiteCursor.java:144) at android.database.sqlite.SQLiteCursor.getCount(SQLiteCursor.java:133) at android.database.Abstrac

我最近收到一份关于Play Store的崩溃报告,该报告如下所示:

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()

有人能告诉我为什么它会坠毁吗

编辑:

上面的代码基本上是它所包含的方法的开头。这是在
onConfigurationChanged()
中运行的,因此我可以使用光标上的新设置更新活动上的选项卡

getCursorData()
是我的
SQLiteOpenHelper
中的一个方法: 我之所以使用rawQuery,是因为实际的查询使用了内部联接。查询本身是很好的,因为它在几年内工作得非常完美,没有抛出这个异常

public Cursor getCursorData(long userformid) {
    SQLiteDatabase db = getWritableDatabase();

    return db.rawQuery("SELECT * FROM table WHERE _id=?", new String[]{
        String.valueOf(id)
    });
}

在调用
moveToFirst()
之前,我已经将代码更改为check
getCount()
。我正在等待出现问题的用户更新到此新版本,以查看它是否有效。

您应该首先检查数据计数,因此请使用以下方法:

if(mCursor!=null && mCursor.getCount()>0 ){
    mCursor.moveToFirst();
}

您应该首先检查数据的计数,因此使用以下方法:

if(mCursor!=null && mCursor.getCount()>0 ){
    mCursor.moveToFirst();
}

它不是
mCursor
,而是
mCursor
内部的某种东西,即
null
。根据您的
堆栈跟踪
,它正好位于
fillWindow
第144行的


通常这种NPE是由于没有正确初始化对象造成的。在inovke
mCursor.moveFirst()
之前,请确保
mCursor
具有足够的详细信息或数据来处理方法调用。

不是
mCursor
,而是
mCursor
中的
null
。根据您的
堆栈跟踪
,它正好位于
fillWindow
第144行的


通常这种NPE是由于没有正确初始化对象造成的。在inovke
mCursor.moveFirst()
之前,请确保
mCursor
具有足够的详细信息或数据来处理方法调用。

重要的是要注意文档中返回的布尔值。该布尔值表示移动是否成功

与其检查光标是否为null,或者是否至少有一行,不如检查该操作的返回值:

if(mCursor.moveToFirst()){
   // Do something, we have success!
} else{
   // Ignore, or show toast to let user know something failed, 
   // whatever your business rule is.
}

请务必注意,文档中会返回布尔值。该布尔值表示移动是否成功

与其检查光标是否为null,或者是否至少有一行,不如检查该操作的返回值:

if(mCursor.moveToFirst()){
   // Do something, we have success!
} else{
   // Ignore, or show toast to let user know something failed, 
   // whatever your business rule is.
}

请发布完整的堆栈跟踪。这应该是一个链式异常,也许第283行的整个方法
MyActivity
highlightedDid您是否知道这是什么原因?@McAdam331-还没有,它只发生在一个用户身上,我自己无法复制。@Kon-这是我在Play Store上收到的整个堆栈跟踪。第283行是.moveToFirst()调用。稍后我会尝试用相关代码更新问题。请发布完整的堆栈跟踪。这应该是一个链式异常,也许第283行的整个方法
MyActivity
highlightedDid您是否知道这是什么原因?@McAdam331-还没有,它只发生在一个用户身上,我自己无法复制。@Kon-这是我在Play Store上收到的整个堆栈跟踪。第283行是.moveToFirst()调用。稍后我会尝试用相关代码更新这个问题。我会尝试一下,看看它是否会在我的下一版本中停止。我不知道moveToFirst()会抛出异常。我将尝试一下,看看它是否会在我的下一版本中停止。我不知道moveToFirst()会抛出异常。问题是调用moveToFirst()是导致崩溃的原因。@Mike Hm,即使在if语句中也是如此?真奇怪。是否可以显示您在
getCursorData()中的操作?我们可能有一些见解。问题是调用moveToFirst()是导致崩溃的原因。@Mike Hm,即使在if语句中也是如此?真奇怪。是否可以显示您在
getCursorData()中的操作?我们可能有一些见解。你的意思是像Gabriella上面建议的那样使用getCount()?你的意思是像Gabriella上面建议的那样使用getCount()?