Android 4.2 staledata中的游标行为已更改

时间:2012-11-20 05:34:15

标签: android sqlite cursor

我有一个应用程序,自2.1以来在所有版本的Android上运行正常,但已停止在Android 4.2上工作。

应用程序在应用程序中保存对游标的引用,并在onTerminate调用中关闭游标。 Cursor仅使用来自SQLite DB的数据填充一次,该数据在应用程序中也保持打开状态,直到onTerminate。

光标中的数据永远不会改变,但它用于填充一个viewpager,其中覆盖了一组值以更改viewpager中数据的位置。

错误如下:

  

11-19 05:29:20.600:E / AndroidRuntime(993):致命异常:主要11-19   05:29:20.600:E / AndroidRuntime(993):   android.database.StaleDataException:试图访问已关闭的   CursorWindow.Most可能的原因:光标在之前被停用   调用这个方法。 11-19 05:29:20.600:E / AndroidRuntime(993):at   android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:139)   11-19 05:29:20.600:E / AndroidRuntime(993):at   android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)   11-19 05:29:20.600:E / AndroidRuntime(993):at   com.ololifepty.wildlife.ReorderingCursorWrapper.getString(ReorderingCursorWrapper.java:71)   11-19 05:29:20.600:E / AndroidRuntime(993):at   com.ololifepty.wildlife.AnimalPageCursorAdapter.instantiateItem(AnimalPageCursorAdapter.java:128)   11-19 05:29:20.600:E / AndroidRuntime(993):at   android.support.v4.view.ViewPager.addNewItem(ViewPager.java:321)11-19   05:29:20.600:E / AndroidRuntime(993):at   android.support.v4.view.ViewPager.populate(ViewPager.java:441)11-19   05:29:20.600:E / AndroidRuntime(993):at   android.support.v4.view.ViewPager.setCurrentItemInternal(ViewPager.java:271)   11-19 05:29:20.600:E / AndroidRuntime(993):at   android.support.v4.view.ViewPager.dataSetChanged(ViewPager.java:369)   11-19 05:29:20.600:E / AndroidRuntime(993):at   android.support.v4.view.ViewPager $ DataSetObserver.onDataSetChanged(ViewPager.java:983)   11-19 05:29:20.600:E / AndroidRuntime(993):at   android.support.v4.view.PagerAdapter.notifyDataSetChanged(PagerAdapter.java:119)   11-19 05:29:20.600:E / AndroidRuntime(993):at   com.ololifepty.wildlife.WildlifeActivity $ 1.handleMessage(WildlifeActivity.java:156)   11-19 05:29:20.600:E / AndroidRuntime(993):at   android.os.Handler.dispatchMessage(Handler.java:99)11-19   05:29:20.600:E / AndroidRuntime(993):at   com.ololifepty.wildlife.WildlifeActivity $ 1.dispatchMessage(WildlifeActivity.java:87)   11-19 05:29:20.600:E / AndroidRuntime(993):at   android.os.Looper.loop(Looper.java:137)11-19 05:29:20.600:   E / AndroidRuntime(993):at   android.app.ActivityThread.main(ActivityThread.java:5039)11-19   05:29:20.600:E / AndroidRuntime(993):at   java.lang.reflect.Method.invokeNative(Native Method)11-19   05:29:20.600:E / AndroidRuntime(993):at   java.lang.reflect.Method.invoke(Method.java:511)11-19 05:29:20.600:   E / AndroidRuntime(993):at   com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run(ZygoteInit.java:793)   11-19 05:29:20.600:E / AndroidRuntime(993):at   com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)11-19   05:29:20.600:E / AndroidRuntime(993):at   dalvik.system.NativeStart.main(原生方法)

光标似乎正在关闭,但我不知道为什么。如果有人能指出我正确的方向,我真的很感激它,因为模拟器的调试速度非常慢。

1 个答案:

答案 0 :(得分:0)

检查onTerminate的{​​{3}}

它永远不会在真实设备中调用,它仅用于仿真器。