开发者

Can someone explain to me this `StaleDataException`

开发者 https://www.devze.com 2023-01-07 01:50 出处:网络
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

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.

0

精彩评论

暂无评论...
验证码 换一张
取 消