不幸的是MyApp已经停止了。我该如何解决这个问题?

问题

我正在开发一个应用程序,每次运行它时,我都收到消息:

不幸的是,MyApp已经停止了。

我该怎么做才能解决这个问题?
关于这个问题 - 显然受到What is a stack trace, and how can I use it to debug my application errors?的启发,有很多问题表明他们的应用程序崩溃了,没有任何进一步的细节。这个问题旨在指导新手Android程序员如何尝试自己解决问题,或者提出正确的问题。


#1 热门回答(574 赞)

这个答案描述了检索堆栈跟踪的过程。已经有堆栈跟踪?阅读“What is a stack trace, and how can I use it to debug my application errors?”中的堆栈跟踪

问题

你的应用程序退出,因为抛出了未捕获的RuntimeException
其中最常见的是NullPointerException

#怎么解决?

每次Android应用程序崩溃(或任何Java应用程序)时,都会向控制台写入“堆栈跟踪”(在本例中为logcat)。此堆栈跟踪包含解决问题的重要信息。

Android Studio

Finding the stack trace in Android Studio

在窗口的底部栏中,单击“Logcat”按钮。或者,你可以按下6.确保在“设备”面板中选择了你的仿真器或设备。接下来,尝试找到堆栈跟踪,以红色显示。可能有很多东西登录到logcat,所以你可能需要滚动一下。查找堆栈跟踪的简单方法是清除logcat(使用右侧的回收站),然后让应用程序再次崩溃。

#我找到了堆栈跟踪,现在是什么?

好极了!你解决问题已经到了一半。
你只需要通过分析堆栈跟踪找出导致应用程序崩溃的确切原因。

阅读“What is a stack trace, and how can I use it to debug my application errors?”中的堆栈跟踪

#我仍然无法解决我的问题!

如果你发现了“异常”及其出现的行,但仍然无法弄清楚如何修复它,请不要犹豫,在StackOverflow上提问。

尝试尽可能简洁:发布堆栈跟踪和相关代码(例如,几行直到抛出Exception的行)。


#2 热门回答(75 赞)

你可以使用Google's ADB tool获取“Logcat文件”来分析问题。

adb logcat > logcat.txt

打开logcat.txt文件并搜索你的应用程序名称。应该有关于它失败的原因,行号,班级名称等的信息。


#3 热门回答(21 赞)

首先,检查你的应用程序崩溃的位置(“不幸的是,MyApp已经停止了。”)。为此,你可以使用Log.e(“TAG”,“Message”);,使用此行你可以看到你登录logcat的应用程序。

之后,你会发现你的应用已经停止了哪一点非常容易在你身边解决。