为什么我在退出Activity时会崩溃?

8
我在退出 Activity 时(通过返回按钮),我的应用程序崩溃了。据我所知,这是发生在 Android 代码库中而不是我的代码中,但我并不完全相信。
以下是来自 adb 的堆栈跟踪:
AndroidRuntime  E  Uncaught handler: thread main exiting due to uncaught exception
AndroidRuntime  E  java.lang.RuntimeException: Unable to stop activity {MyApp/MyApp.MainActivity}: java.lang.NullPointerException
AndroidRuntime  E      at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3097)
AndroidRuntime  E      at android.app.ActivityThread.handleDestroyActivity(ActivityThread.java:3159)
AndroidRuntime  E      at android.app.ActivityThread.access$2400(ActivityThread.java:112)
AndroidRuntime  E      at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1724)
AndroidRuntime  E      at android.os.Handler.dispatchMessage(Handler.java:99)
AndroidRuntime  E      at android.os.Looper.loop(Looper.java:123)
AndroidRuntime  E      at android.app.ActivityThread.main(ActivityThread.java:3948)
AndroidRuntime  E      at java.lang.reflect.Method.invokeNative(Native Method)
AndroidRuntime  E      at java.lang.reflect.Method.invoke(Method.java:521)
AndroidRuntime  E      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:782)
AndroidRuntime  E      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:540)
AndroidRuntime  E      at dalvik.system.NativeStart.main(Native Method)
AndroidRuntime  E  Caused by: java.lang.NullPointerException
AndroidRuntime  E      at android.app.Activity.performStop(Activity.java:3575)
AndroidRuntime  E      at android.app.ActivityThread.performDestroyActivity(ActivityThread.java:3092)
AndroidRuntime  E      ... 11 more

有人有任何想法/建议吗?

(涉及IT技术方面)
3个回答

14

因为没有代码,所以无法提供太多帮助。 正在继续查看。

Caused by: java.lang.NullPointerException at android.app.Activity.performStop(Activity.java:3575)

我刚刚检查了Activity.java文件。

       final int N = mManagedCursors.size();
        for (int i=0; i<N; i++) {
            ManagedCursor mc = mManagedCursors.get(i); 
            if (!mc.mReleased) {
                mc.mCursor.deactivate(); // line 3575
                mc.mReleased = true;
            }
        }

你确定所有的游标都已经正确释放了吗?


我认为它们应该由Activity来管理...我已经在我正在使用的唯一Cursor上调用了startManagingCursor()。这不应该处理吗? - Jeremy Logan
从文档中得知:该方法允许活动基于其生命周期来管理给定游标的生命周期。也就是说,当活动停止时,它将自动调用给定游标上的deactivate()方法,并在稍后重新启动时为您调用requery()方法。当活动被销毁时,所有受管理的游标都将自动关闭。 - Jeremy Logan
你发布的代码不就应该做这件事吗? - Jeremy Logan
2
哦,等等……我打赌光标对象为空了……谢谢你指出了我的错误。 - Jeremy Logan
没错,就是这样。它在将空值“绑定”时没有问题,但在尝试释放它时会抛出异常。谢谢。 - Jeremy Logan

4

0
在调用startManagingCursor()方法之前,您的Activity中的Cursor为null。不要让Cursor为空。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接