我目前大量修改/改写一个Android应用程序,我已经看到了大意如下的一个非常偶然的碰撞:一个CursorAdapter
方法被调用,它调用AbstractWindowedCursor#checkPosition()
和:除了提前调用cursor.close()之外,什么原因会导致StaleDataException?
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
s。我们所有的Cursor
s来自CursorLoader
s,而转而由ContentProvider
生产。我们经过Cursor
到每个相应的CursorAdapter
从LoaderCallbacks
,我们注册Cursor
的通知在ContentProvider
,我们通知的ContentResolver
从每个insert(...)
,delete(...)
和update(...)
...总之我不能找到在使用中为什么Cursor
会关闭的任何原因。
那么:其他原因是StaleDataException
?
它已经因为你一会儿问,但......有没有涉及FilterQueryProvider,有任何机会? – 2014-05-09 15:57:22
嘿安德鲁!你能找出解决方案吗? – TheLittleNaruto 2016-08-25 11:15:53