Может кто-нибудь объяснить мне это `StaleDataException`

Может кто-нибудь объяснить мне это StaleDataException

07-11 19:58:23.298 E/AndroidRuntime( 1044): Uncaught handler: thread main exiting due to uncaught exception
07-11 19:58:23.368 E/AndroidRuntime( 1044): android.database.StaleDataException: Access closed cursor
07-11 19:58:23.368 E/AndroidRuntime( 1044): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:217)
07-11 19:58:23.368 E/AndroidRuntime( 1044): at android.database.AbstractWindowedCursor.getInt(AbstractWindowedCursor.java:84)
07-11 19:58:23.368 E/AndroidRuntime( 1044): at android.database.CursorWrapper.getInt(CursorWrapper.java:128)

Когда и как нам нужно обеспечить указатель на курсоре, и почему происходит сбой с этим исключением?

4 ответа

Решение

Вы пытаетесь получить информацию из Cursor это уже было закрыто. Вы должны проверить, закрыт ли курсор или нет, используя isClosed метод.

Вы не можете закрыть курсор, пока CursorAdapter больше не нужен. Так что вы можете закрыть его в методе onDestroy():

@Override
public void onDestroy() {
 super.onDestroy();

     //Close the cursor
     cursor.close();
     //Close the database
     database.close();
    }

Использование Activity.getContentResolver.query() вместо Activity.managedQuery(), Так как managedQuery() устарела. Меня устраивает.

В моем случае я закрывал курсор в методе onStop(). Оказалось, что поворот экрана заставлял этот код работать и, следовательно, вызывал исключение StaleDataException.

Другие вопросы по тегам