Android(JAVA)-CursorIndexOutOfBoundsException

Android(JAVA)-CursorIndexOutOfBoundsException,java,android,exception,Java,Android,Exception,有时,当我调用cursorToCacheItem时,应用程序会因以下错误而崩溃: android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0 android.database.AbstractCursor.checkPosition(AbstractCursor.java:400) android.database.AbstractWindowedCursor.checkPositio

有时,当我调用cursorToCacheItem时,应用程序会因以下错误而崩溃:

android.database.CursorIndexOutOfBoundsException: Index 0 requested, with a size of 0
android.database.AbstractCursor.checkPosition(AbstractCursor.java:400)
android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
com.itirsolutions.cache.BaseCache.cursorToCacheItem(BaseCache.java:131)
com.itirsolutions.cache.BaseCache.get(BaseCache.java:101)
com.itirsolutions.cache.BaseCache.put(BaseCache.java:47)
com.itirsolutions.transactions.UsersInfoCache.put(UsersInfoCache.java:27)
etc..
My cursorToCacheItem函数:

private CacheItem cursorToCacheItem(Cursor cursor) {
    if (cursor == null || cursor.getColumnCount() == 0)
        return null;

    // ...
}
我做错了什么?检查后,为什么不工作?

放:

if (cursor == null || cursor.getCount() == 0)
而不是

if (cursor == null || cursor.getColumnCount() == 0).
您正在检查列数而不是行数。

更改此选项

   if (cursor == null || cursor.getColumnCount() == 0)

在查询光标之前先写入cursor.moveToFirst。默认情况下,它位于其最后位置

然后,可以使用Whilecursor.isAfterLast循环它的内容,并在循环体中使用cursor.moveToNext

if (!(cursor.moveToFirst()) || cursor.getCount() ==0){