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

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

概述我目前正在大量修改/重写 Android应用程序,并且看到偶尔会出现以下错误:CursorAdapter方法被调用,它调用AbstractWindowedCursor#checkPosition(),并且: 02-20 15:03:18.180 E/AndroidRuntime(17143): android.database.StaleDataException: Attempting to a 我目前正在大量修改/重写 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();  }
总结

以上是内存溢出为你收集整理的android – 除了过早调用cursor.close()之外,什么可能导致StaleDataException?全部内容,希望文章能够帮你解决android – 除了过早调用cursor.close()之外,什么可能导致StaleDataException?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1133683.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存