android - 除了过早调用 cursor.close() 之外还有什么会导致 StaleDataException?

标签 android android-contentprovider android-loadermanager android-loader 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)

问题是,我们没有关闭任何Cursor。我们所有的 Cursor 都来自 CursorLoader,然后由 ContentProvider 生成。我们将 CursorLoaderCallbacks 传递到每个相应的 CursorAdapter,我们正在注册 Cursor 以获取通知在 ContentProvider 中,我们通知来自每个 insert(...)ContentResolver delete(...)update(...) ...简而言之,我找不到 Cursor 在使用。

那么:StaleDataException其他原因是什么?

最佳答案

如果您正在调用 Cursor.changeCursor(newCursor),它将自动为您关闭旧游标。如果有任何东西仍在尝试访问游标,这可能会导致 android.database.StaleDataException。

关于android - 除了过早调用 cursor.close() 之外还有什么会导致 StaleDataException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14983262/

相关文章:

android - 如何使用 `weight` 修饰符创建可组合函数?

javascript - 在 SpannableString 上设置拖动监听器

android - 没有 ContentProvider 的 CursorLoader 使用

android - 在 Activity Android 中实现 LoaderCallbacks

安卓 : close all the activities when Login activity is started

android - 禁用触摸背景 fragment

Android 获取联系人到应用程序中

java - 如何在 ContentProvider 中传递 Rawquery?

java - 可以解析内容uri

android 兼容性包 - fragment ...未附加到 Activity