Can someone explain to me this 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.开发者_C百科database.CursorWrapper.getInt(CursorWrapper.java:128)
When and how do we need to assure a requiry on the cursor, and why fails with this Exception?
You are trying to retrieve information from a Cursor
that has already been closed. You must verify whether the cursor is closed or not by using the isClosed
method.
You can't close the cursor until CursorAdapter is no longer needed. So you can close it in onDestroy() method:
@Override
public void onDestroy() {
super.onDestroy();
//Close the cursor
cursor.close();
//Close the database
database.close();
}
In my case, I was closing the cursor in the onStop() method. It turned out that the rotation of the screen was causing this code to run and hence give the StaleDataException.
Use Activity.getContentResolver.query()
instead of Activity.managedQuery()
. Because managedQuery()
is deprecated. It works for me.
精彩评论