android – 除了过早调用cursor.close()之外,什么可能导致StaleDataException?

前端之家收集整理的这篇文章主要介绍了android – 除了过早调用cursor.close()之外,什么可能导致StaleDataException?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我目前正在大量修改/重写 Android应用程序,并且看到偶尔会出现以下错误:CursorAdapter方法调用,它调用AbstractWindowedCursor#checkPosition(),并且:
02-20 15:03:18.180 E/AndroidRuntime(17143): android.database.StaleDataException: Attempting to access a closed CursorWindow.Most probable cause: cursor is deactivated prior to calling this method.
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.AbstractWindowedCursor.getLong(AbstractWindowedCursor.java:74)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.database.CursorWrapper.getLong(CursorWrapper.java:106)
02-20 15:03:18.180 E/AndroidRuntime(17143): at android.widget.CursorAdapter.getItemId(CursorAdapter.java:220)

麻烦的是,我们没有关闭任何游标.我们所有的游标来自CursorLoaders,而后者则由ContentProvider生成.我们将CursorAdapter从LoaderCallbacks传递到每个相应的CursorAdapter中,我们在ContentProvider中注册Cursor for Notification,我们从每个插入(…),delete(…)和update(…)中通知ContentResolver …)简而言之,我在使用中找不到任何光标关闭的原因.

那么,StaleDataException的其他原因是什么?

解决方法

如果您在android 4.0及更高版本中调用了Context.managedQuery(),则不应该调用Cursor.close(),否则StaleDataException将被抛出,您可以修改代码如下:
if(VERSION.SDK_INT < 14) {  
    cursor.close();  
}
原文链接:https://www.f2er.com/android/313118.html

猜你在找的Android相关文章