Don't try to requery an already closed cursor.  What could possibly be
clearer about that message?

I suspect that Honeycomb tightened up this check and exposed a bug in
your app.



On Feb 24, 7:26 am, andfan22 <[email protected]> wrote:
> I have an app that works fine on all recent versions of android up to
> and including gingerbread.  When testing on honeycomb however,  I'm
> getting the following exception when restarting an activity that uses
> managed cursors.
>
> FATAL EXCEPTION: main
> java.lang.RuntimeException: Unable to resume activity {com.xxxxx.MyApp/
> xxxxx.MyApp.MyActivity}: java.lang.IllegalStateException: trying to
> requery an already closed cursor
>     at
> android.app.ActivityThread.performResumeActivity(ActivityThread.java:
> 2215)
>     at
> android.app.ActivityThread.handleResumeActivity(ActivityThread.java:
> 2243)
>     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:
> 1019)
>     at android.os.Handler.dispatchMessage(Handler.java:99)
>     at android.os.Looper.loop(Looper.java:126)
>     at android.app.ActivityThread.main(ActivityThread.java:3997)
>     at java.lang.reflect.Method.invokeNative(Native Method)
>     at java.lang.reflect.Method.invoke(Method.java:491)
>     at com.android.internal.os.ZygoteInit
> $MethodAndArgsCaller.run(ZygoteInit.java:841)
>     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:599)
>     at dalvik.system.NativeStart.main(Native Method)
> Caused by: java.lang.IllegalStateException: trying to requery an
> already closed cursor
>     at android.app.Activity.performRestart(Activity.java:4343)
>     at
> android.app.ActivityThread.performRestartActivity(ActivityThread.java:
> 2640)
>     at
> android.app.LocalActivityManager.moveToState(LocalActivityManager.java:
> 163)
>     at
> android.app.LocalActivityManager.dispatchResume(LocalActivityManager.java:
> 518)
>     at android.app.ActivityGroup.onResume(ActivityGroup.java:58)
>     at xxxxx.MyApp.MyActivity.onResume(MyActivity.java:57)
>     at
> android.app.Instrumentation.callActivityOnResume(Instrumentation.java:
> 1153)
>     at android.app.Activity.performResume(Activity.java:4374)
>     at
> android.app.ActivityThread.performResumeActivity(ActivityThread.java:
> 2205)
>     ... 10 more
>
> Has anybody else come across this?  I realise that the Activity
> methods for cursor management (managedQuery, startManagingCursor and
> stopManagingCursor) have been deprecated in honeycomb in favour of the
> new CursorLoader class, but I would have expected backward
> compatibility to be preserved.
>
> The specific details for replicating the issue are:
> The main activity is a tabbed activity, with tab content provided by
> sub-activities.  One of the sub activities is an
> ExpandableListActivity with data provided by cursors (one cursor for
> the group list, another for children).  Initially all groups are
> collapsed.  If I open a new activity (eg Settings via a menu option)
> while viewing this tab before expanding any groups, then exit the new
> activity returning to the tab with the collapsed groups, everything is
> fine.  If, however, I expand one or more of the groups before opening
> a new activity, then when I return the above exception is triggered.
> Interestingly, if I expand a group then collapse it again, then launch
> a new activity with all groups collapsed, the exception *is*
> triggered.  The mere fact that a group was expanded (even if
> subsequently collapsed) is enough to trigger the "trying to requery an
> already closed cursor" exception during restart of the main activity.
> Note: the issue is NOT triggered by merely triggering the pause/resume
> activity lifecycle methods.  It only happens if the main activity is
> stopped and restarted (calling onRestart(), onStart() and then
> onResume()).
>
> Does anyone know what is likely to be causing this and if an easy fix
> is available?  I would prefer not to refactor my code to use the new
> CursorLoader framework as my app needs to work on pre-honeycomb
> versions.  To use the new API would mean doing so via reflection -- I
> don't want to go there if I can help it.
>
> Thanks in advance ...

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to