And*_*yld 12 android staledataexception android-contentprovider android-loadermanager android-loader
我目前正在大量修改/重写一个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)
Run Code Online (Sandbox Code Playgroud)
麻烦的是,我们没有关闭任何Cursors.我们所有的Cursors都来自CursorLoaders而且又是由a产生的ContentProvider.我们要传递Cursor到每个相应的CursorAdapter从LoaderCallbacks,我们正在注册Cursor中的通知ContentProvider,我们通知了ContentResolver从各insert(...),delete(...)和update(...)......总之我找不到任何理由为什么Cursor会在使用中关闭一段时间.
那么:a 的其他原因是StaleDataException什么?
exl*_*ong -3
如果你Context.managedQuery()在android 4.0及以上版本中调用,你不应该调用Cursor.close(),如果你这样做,StaleDataException会被抛出,你可以修改你的代码如下:
if(VERSION.SDK_INT < 14) {
cursor.close();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1012 次 |
| 最近记录: |