我有一个应用程序,自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(原生方法)
光标似乎正在关闭,但我不知道为什么。如果有人能指出我正确的方向,我真的很感激它,因为模拟器的调试速度非常慢。
答案 0 :(得分:0)
检查onTerminate
的{{3}}
它永远不会在真实设备中调用,它仅用于仿真器。