Android兼容性库CursorLoader:java.lang.IllegalStateException:游标已关闭

Android兼容性库CursorLoader:java.lang.IllegalStateException:游标已关闭,第1张

概述我目前正在使用 Android兼容性库中的片段内的CursorLoader. 几乎每次,在Droid 2(我无法在Nexus One或Sensation上重现),似乎游标正在关闭太快,这是导致各种错误.不幸的是,我的代码中没有任何帮助的痕迹(因为问题是为什么Cursor被关闭,而不是Android通知),所以我真的很想弄清楚出了什么问题.有其他人遇到这个问题吗? (或有想法可能发生). 一些堆栈跟 我目前正在使用 Android兼容性库中的片段内的CursorLoader.
几乎每次,在DroID 2(我无法在Nexus One或Sensation上重现),似乎游标正在关闭太快,这是导致各种错误.不幸的是,我的代码中没有任何帮助的痕迹(因为问题是为什么Cursor被关闭,而不是AndroID通知),所以我真的很想弄清楚出了什么问题.有其他人遇到这个问题吗? (或有想法可能发生).

一些堆栈跟踪:

java.lang.IllegalStateException: Cursor is closed                                        at androID.database.sqlite.sqliteCursor.fillWindow(sqliteCursor.java:278)             at androID.database.sqlite.sqliteCursor.onMove(sqliteCursor.java:255)                 at androID.database.AbstractCursor.movetoposition(AbstractCursor.java:187)            at androID.database.CursorWrapper.movetoposition(CursorWrapper.java:187)              at androID.support.v4.Widget.CursorAdapter.getItemID(CursorAdapter.java:226)          at androID.Widget.AbsListVIEw$PerformClick.run(AbsListVIEw.java:1721)                 at androID.os.Handler.handleCallback(Handler.java:587)                                at androID.os.Handler.dispatchMessage(Handler.java:92)                                at androID.os.Looper.loop(Looper.java:143)                                            at androID.app.ActivityThread.main(ActivityThread.java:4717)                          at java.lang.reflect.Method.invokeNative(Native Method)                               at java.lang.reflect.Method.invoke(Method.java:521)                                   at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)    at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)                       at dalvik.system.NativeStart.main(Native Method)           java.lang.IllegalStateException: Cursor is closed                                                              at androID.database.sqlite.sqliteCursor.fillWindow(sqliteCursor.java:278)                                   at androID.database.sqlite.sqliteCursor.onMove(sqliteCursor.java:255)                                       at androID.database.AbstractCursor.movetoposition(AbstractCursor.java:187)                                  at androID.database.CursorWrapper.movetoposition(CursorWrapper.java:187)                                    at androID.support.v4.Widget.CursorAdapter.getItemID(CursorAdapter.java:226)                                at androID.Widget.AdapterVIEw.getItemIDAtposition(AdapterVIEw.java:745)                                     at androID.Widget.AdapterVIEw.setSelectedpositionInt(AdapterVIEw.java:1081)                                 at androID.Widget.AbsListVIEw.ontouchEvent(AbsListVIEw.java:2207)                                           at androID.Widget.ListVIEw.ontouchEvent(ListVIEw.java:3377)                                                 at androID.vIEw.VIEw.dispatchtouchEvent(VIEw.java:3766)                                                     at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:897)                                            at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:936)                                            at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:936)                                            at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:936)                                            at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:936)                                            at androID.vIEw.VIEwGroup.dispatchtouchEvent(VIEwGroup.java:936)                                            at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.superdispatchtouchEvent(PhoneWindow.java:1800)    at com.androID.internal.policy.impl.PhoneWindow.superdispatchtouchEvent(PhoneWindow.java:1140)              at androID.app.Activity.dispatchtouchEvent(Activity.java:2105)                                              at com.androID.internal.policy.impl.PhoneWindow$DecorVIEw.dispatchtouchEvent(PhoneWindow.java:1784)         at androID.vIEw.VIEwRoot.handleMessage(VIEwRoot.java:1794)                                                  at androID.os.Handler.dispatchMessage(Handler.java:99)                                                      at androID.os.Looper.loop(Looper.java:143)                                                                  at androID.app.ActivityThread.main(ActivityThread.java:4717)                                                at java.lang.reflect.Method.invokeNative(Native Method)                                                     at java.lang.reflect.Method.invoke(Method.java:521)                                                         at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)                          at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)                                             at dalvik.system.NativeStart.main(Native Method)     java.lang.RuntimeException: Unable to pause activity : java.lang.IllegalStateException: Cursor is closed    at androID.app.ActivityThread.performPauseActivity(ActivityThread.java:3438)                             at androID.app.ActivityThread.performPauseActivity(ActivityThread.java:3395)                             at androID.app.ActivityThread.handlePauseActivity(ActivityThread.java:3378)                              at androID.app.ActivityThread.access00(ActivityThread.java:129)                                       at androID.app.ActivityThread$H.handleMessage(ActivityThread.java:2124)                                  at androID.os.Handler.dispatchMessage(Handler.java:99)                                                   at androID.os.Looper.loop(Looper.java:143)                                                               at androID.app.ActivityThread.main(ActivityThread.java:4717)                                             at java.lang.reflect.Method.invokeNative(Native Method)                                                  at java.lang.reflect.Method.invoke(Method.java:521)                                                      at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)                       at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)                                          at dalvik.system.NativeStart.main(Native Method)                                                     Caused by: java.lang.IllegalStateException: Cursor is closed                                                at androID.database.sqlite.sqliteCursor.fillWindow(sqliteCursor.java:278)                                at androID.database.sqlite.sqliteCursor.onMove(sqliteCursor.java:255)                                    at androID.database.AbstractCursor.movetoposition(AbstractCursor.java:187)                               at androID.database.CursorWrapper.movetoposition(CursorWrapper.java:187)                                 at androID.support.v4.Widget.CursorAdapter.getItemID(CursorAdapter.java:226)                             at androID.Widget.AbsListVIEw.onSaveInstanceState(AbsListVIEw.java:910)                                  at androID.Widget.ListVIEw.onSaveInstanceState(ListVIEw.java:3687)                                       at androID.vIEw.VIEw.dispatchSaveInstanceState(VIEw.java:6070)                                           at androID.vIEw.VIEwGroup.dispatchFreezeSelfOnly(VIEwGroup.java:1197)                                    at androID.Widget.AdapterVIEw.dispatchSaveInstanceState(AdapterVIEw.java:759)                            at androID.vIEw.VIEwGroup.dispatchSaveInstanceState(VIEwGroup.java:1184)                                 at androID.vIEw.VIEw.saveHIErarchyState(VIEw.java:6053)                                                  at androID.support.v4.app.FragmentManagerImpl.saveFragmentVIEwState(FragmentManager.java:1387)           at androID.support.v4.app.FragmentManagerImpl.saveAllState(FragmentManager.java:1439)                    at androID.support.v4.app.FragmentActivity.onSaveInstanceState(FragmentActivity.java:468)                at androID.app.Activity.performSaveInstanceState(Activity.java:1040)                                     at androID.app.Instrumentation.callActivityOnSaveInstanceState(Instrumentation.java:1180)                at androID.app.ActivityThread.performPauseActivity(ActivityThread.java:3420)                             ... 12 more

而对于好的措施,至少在我的代码中有一行:

androID.database.StaleDataException: Access closed cursor                                       at androID.database.AbstractwindowedCursor.checkposition(AbstractwindowedCursor.java:217)    at androID.database.AbstractwindowedCursor.getBlob(AbstractwindowedCursor.java:27)           at androID.database.CursorWrapper.getBlob(CursorWrapper.java:143)                            at androID.database.CursorWrapper.getBlob(CursorWrapper.java:143)                            at com.testapp.TestFragment.setVIEwValue(TestFragment.java:84)                             at androID.support.v4.Widget.SimpleCursorAdapter.bindVIEw(SimpleCursorAdapter.java:131)      at androID.support.v4.Widget.CursorAdapter.getVIEw(CursorAdapter.java:257)                   at androID.Widget.AbsListVIEw.obtainVIEw(AbsListVIEw.java:1319)                              at androID.Widget.ListVIEw.makeAndAddVIEw(ListVIEw.java:1789)                                at androID.Widget.ListVIEw.fillDown(ListVIEw.java:656)                                       at androID.Widget.ListVIEw.fillSpecific(ListVIEw.java:1342)                                  at androID.Widget.ListVIEw.layoutChildren(ListVIEw.java:1616)                                at androID.Widget.AbsListVIEw.onLayout(AbsListVIEw.java:1172)                                at androID.vIEw.VIEw.layout(VIEw.java:7037)                                                  at androID.Widget.FrameLayout.onLayout(FrameLayout.java:333)                                 at androID.vIEw.VIEw.layout(VIEw.java:7037)                                                  at androID.Widget.FrameLayout.onLayout(FrameLayout.java:333)                                 at androID.vIEw.VIEw.layout(VIEw.java:7037)                                                  at androID.Widget.linearLayout.setChildFrame(linearLayout.java:1249)                         at androID.Widget.linearLayout.layoutVertical(linearLayout.java:1125)                        at androID.Widget.linearLayout.onLayout(linearLayout.java:1042)                              at androID.vIEw.VIEw.layout(VIEw.java:7037)                                                  at androID.Widget.FrameLayout.onLayout(FrameLayout.java:333)                                 at androID.vIEw.VIEw.layout(VIEw.java:7037)                                                  at androID.Widget.FrameLayout.onLayout(FrameLayout.java:333)                                 at androID.vIEw.VIEw.layout(VIEw.java:7037)                                                  at androID.vIEw.VIEwRoot.performTraversals(VIEwRoot.java:1054)                               at androID.vIEw.VIEwRoot.handleMessage(VIEwRoot.java:1736)                                   at androID.os.Handler.dispatchMessage(Handler.java:99)                                       at androID.os.Looper.loop(Looper.java:143)                                                   at androID.app.ActivityThread.main(ActivityThread.java:4717)                                 at java.lang.reflect.Method.invokeNative(Native Method)                                      at java.lang.reflect.Method.invoke(Method.java:521)                                          at com.androID.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:868)           at com.androID.internal.os.ZygoteInit.main(ZygoteInit.java:626)                              at dalvik.system.NativeStart.main(Native Method)

更新:修正,请看下面我的答案

解决方法 我没有提示问题是什么,但也许这可以帮助你固定下来.

创建一个这样的LoggedCursor并设置光标工厂,这样你的查询就可以给你LoggedCursor:

class LoggedCursor extends sqliteCursor {    @OverrIDe    public voID close() {        Log.d(TAG,"Cursor closed by:",new RuntimeException("Stack trace"));        super.close();    }}

RuntimeException只是为了轻松记录堆栈跟踪,而不是抛出它.当光标关闭时,您将看到日志中的跟踪.

希望这有助于弄清楚什么时候和由谁关闭.

总结

以上是内存溢出为你收集整理的Android兼容性库CursorLoader:java.lang.IllegalStateException:游标已关闭全部内容,希望文章能够帮你解决Android兼容性库CursorLoader:java.lang.IllegalStateException:游标已关闭所遇到的程序开发问题。

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

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

原文地址: http://outofmemory.cn/web/1131784.html

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

发表评论

登录后才能评论

评论列表(0条)

保存