【问题标题】:Cursor behavior changed in Android 4.2 staledataAndroid 4.2 staledata 中的光标行为发生了变化
【发布时间】:2012-11-20 05:34:15
【问题描述】:

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

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

游标中的数据永远不会改变,但它用于填充视图分页器,其中包含一组叠加的值,以更改视图分页器中数据的位置。

错误如下:

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

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

【问题讨论】:

    标签: android sqlite cursor


    【解决方案1】:

    检查doc 是否有onTerminate

    它永远不会在真实设备中调用,它仅在模拟器上使用。

    【讨论】:

    • 我不认为这个 onTerminate 是问题,因为光标提前关闭而不是不关闭。
    猜你喜欢
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 2012-02-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多