Unfortunately MyApp has stopped. How can I solve this?
我正在开发一个应用程序,每次运行它,我都会收到以下消息:
Unfortunately, MyApp has stopped.
我能做些什么来解决这个问题?
关于这个问题-显然是受到什么是堆栈跟踪的启发,我如何使用它来调试我的应用程序错误?,有很多问题表明他们的应用程序崩溃了,没有任何进一步的细节。这个问题的目的是指导新手安卓程序员如何尝试自己解决问题,或者问正确的问题。
此答案描述了检索堆栈跟踪的过程。已经有堆栈跟踪了吗?阅读"什么是堆栈跟踪,如何使用它调试应用程序错误?"中的堆栈跟踪。
问题您的应用程序退出,因为抛出了未捕获的
每次Android应用程序崩溃(或任何Java应用程序),EDOCX1 2都被写入控制台(在这种情况下,LogCAT)。这个堆栈跟踪包含解决问题的重要信息。
安卓工作室在窗口的底部栏中,单击
哎呀!你已经走到解决问题的一半了。通过分析堆栈跟踪,您只需要找出究竟是什么导致了应用程序崩溃。
阅读"什么是堆栈跟踪,如何使用它调试应用程序错误?"中的堆栈跟踪。
我还是解决不了我的问题!如果您已经找到了您的
尽量简明扼要:发布堆栈跟踪和相关代码(例如,一些行到抛出
你可以使用谷歌的adb工具让
1 | adb logcat > logcat.txt |
打开
首先,检查应用程序崩溃的点(
之后,你会发现你的应用程序在哪一点上停止了它很容易在你身边解决的问题。
只需检查log cat中的错误。
您可以从Eclipse中获得log cat选项:
window->show view->others->Android->Logcat
日志cat包含错误。
另外,您还可以通过在调试模式下执行应用程序来检查错误。先设置断点,然后设置断点:
right click on project->debug as->Android application
注:此答案使用Android Studio 2.2.2
注2:我认为您的设备已成功连接。
当应用程序崩溃时,首先要做的就是查看logcat,在android studio的底部有一个工具栏,上面有一系列菜单:
点击"android monitor"(上图中我加下划线的那个)。^)
现在,你会得到这样的结果:
将"EDOCX1"〔0〕改为"EDOCX1"〔1〕只会显示记录的错误。现在不要担心所有这些错误(如果你有)。
好啊。现在,做你所做的来破坏你的应用程序。在你的应用程序崩溃后,去你的logcat。您应该找到一个新的崩溃日志,其中包含大量的
除此之外,还有一个例外。在我的例子中,它是一个
如果该
点击那个蓝色链接。它应该把你带到问题发生的地方。在我的例子中,这是由于这句话:
1 |
所以,现在我知道它为什么会崩溃。这是因为我自己也在抛出异常。这是一个明显的错误。
但是,假设我还有一个错误:
1 | java.lang.NullPointerException |
我查看了我的logcat,点击了它给我的蓝色链接,它把我带到了这里:
1 | mTextView.setText(myString); |
所以,现在我要调试。根据这个stackoverflow问题,nullpointerException表示某个东西是
那么,我们来看看什么是空的。有两种可能性。或者
1 2 |
现在,和以前一样(我们将verose更改为error),我们希望将"error"更改为"debug"。因为我们是通过调试登录的。以下是所有的日志方法:
1 2 3 4 5 6 7 | Log. d means Debug e means error w means warning v means verbose i means information wtf means"What a terrible failure". This is similar to Log.e |
所以,因为我们使用了
注意,在我们的例子中,
1 2 | yourPackageNameAndApp: mTextView is null: true yourPackageNameAndApp: myString is null: false |
现在我们知道mtextview为空。
我遵守我的代码,现在我注意到了一些事情。
我宣布江户一〔15〕在班上名列前茅。但是,我没有定义它。
基本上我忘了在我的onCreate()中这样做:
1 | mTextView = (TextView) findViewById(R.id.textview_id_in_xml); |
所以这就是为什么
此弹出窗口仅在代码中出现致命异常时显示,该异常会停止应用程序的执行。它可以是任何例外的
最好的检查方法是通过logcat,如果你还在android studio中开发应用程序,这是快速读取堆栈跟踪和检查应用程序原因的方法。
如果你的应用已经上线,那么你就不能使用logcat。因此,为了实现这一点,您可以实现
检查您的
您可以使用以下任何工具:
adb logcat
adb logcat > logs.txt (you can use editors to open and search errors.)
eclipse logcat (If not visible in eclipse, Go to Windows->Show View->Others->Android->LogCat)
Android Debug Monitor or Android Device Monitor(type command monitor or open through UI)
Android Studio
我建议使用Android调试监视器,它很好。因为Eclipse挂起的时候日志太多了,而且通过adb logcat过滤器都很困难。
你得检查一下
如何做到这一点?
在您的IDE上,检查Windows窗体logcat
如果你看不到logcat窗口,请走到这条路径并打开它。
1 | window->show view->others->Android->Logcat |
如果您使用的是Google API,请转到以下路径
adb logcat>logcat.txt
让我分享一个基本的logcat分析,当你遇到一个力关闭(当应用停止工作)。
文档
android收集/分析日志的基本工具是logcat。
这是Android关于logcat的页面
如果您使用Android Studio,也可以检查此链接。
捕捉
基本上,您可以使用以下命令手动捕获logcat(或者只检查androidstudio中的androidmonitor窗口):
1 | adb logcat |
有很多参数可以添加到命令中,帮助您筛选和显示所需的消息…这是私人的…我总是使用下面的命令来获取消息时间戳:
1 | adb logcat -v time |
您可以将输出重定向到文件,并在文本编辑器中对其进行分析。
分析
如果你的应用程序崩溃了,你会得到如下信息:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | 07-09 08:29:13.474 21144-21144/com.example.khan.abc D/AndroidRuntime: Shutting down VM 07-09 08:29:13.475 21144-21144/com.example.khan.abc E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.khan.abc, PID: 21144 java.lang.NullPointerException: Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference at com.example.khan.abc.AudioFragment$1.onClick(AudioFragment.java:125) at android.view.View.performClick(View.java:4848) at android.view.View$PerformClick.run(View.java:20262) at android.os.Handler.handleCallback(Handler.java:815) at android.os.Handler.dispatchMessage(Handler.java:104) at android.os.Looper.loop(Looper.java:194) at android.app.ActivityThread.main(ActivityThread.java:5631) at java.lang.reflect.Method.invoke(Native Method) at java.lang.reflect.Method.invoke(Method.java:372) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:959) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:754) 07-09 08:29:15.195 21144-21144/com.example.khan.abc I/Process: Sending signal. PID: 21144 SIG: 9 |
日志的这一部分向您展示了许多信息:
- 问题发生时:
07-09 08:29:13.475 。
重要的是要检查问题发生的时间…您可以在日志中找到几个错误…您必须确保正在检查正确的消息:)
- 哪个应用程序崩溃了:
com.example.khan.abc 。
这样,您就知道哪个应用程序崩溃了(以确保您正在检查有关消息的日志)
- 哪个错误:
java.lang.NullPointerException 。
空指针异常错误
- 错误详细信息:
Attempt to invoke virtual method 'void android.support.v4.app.FragmentActivity.onBackPressed()' on a null object reference 。
您试图从
堆栈跟踪:堆栈跟踪向您显示方法调用顺序…有时,错误发生在调用方法中(而不是被调用方法中)。
在COM.K.H.A.A.AudioFuffGrace$ 1。onClick(AudioFractJava:JAVA:125)
文件
它由以下人员调用:
它由以下人员调用:
它由以下人员调用:
1 | at android.os.Handler.handleCallback(Handler.java:815) |
等。。。。
概述
这只是一个概述…并非所有的日志都很简单…它只是分享这个想法,并提供一个入门级的信息给你…
我希望我能帮助你…当做
在下面的showtoas()方法中,您必须为上下文或应用程序上下文传递另一个参数,这样您就可以尝试它了。
1 2 3 4 5 6 7 8 9 10 11 12 | public void showToast(String error, Context applicationContext){ LayoutInflater inflater = getLayoutInflater(); View view = inflater.inflate(R.layout.custom_toast, (ViewGroup) findViewById(R.id.toast_root)); TextView text = (TextView) findViewById(R.id.toast_error); text.setText(error); Toast toast = new Toast(applicationContext); toast.setGravity(Gravity.TOP | Gravity.FILL_HORIZONTAL, 0, 0); toast.setDuration(Toast.LENGTH_SHORT); toast.setView(view); toast.show(); } |
使用logcat并尝试找出导致应用程序崩溃的原因。
如果您使用Android Studio,要查看logcat,请按Alt+6。或
如果你使用Eclipse那么窗口>打开透视图>其他-logcat
转到logcat,从下拉菜单中选择错误。这将包含帮助您调试的所有必需信息。如果没有帮助,把logcat作为你的问题的编辑,有人会帮你解决。
如果你的应用因为某种原因崩溃,没有良好的stacktrace。尝试从第一行调试它,然后一行一行地进行调试,直到崩溃为止。然后你会得到答案,哪一行会给你带来麻烦。很有可能,然后您可以将其包装成try catch块并打印错误输出。
您也可以自己获取此错误消息,而不需要任何堆栈跟踪或任何进一步的错误消息。
在这种情况下,您需要确保您的Android清单配置正确(包括库中发生的任何清单合并和库中的任何活动),并特别注意清单文件中应用程序中显示的第一个活动。
开发期间崩溃
尝试logview-0.20获取日志并在开发期间对其进行分析。在Linux中运行时,请确保将
如果你不喜欢它,有很多其他的桌面日志浏览器可供Android使用。
在野外坠毁集成实时崩溃报告工具(如FireBase Crashlytics)以获取用户设备上发生的未处理异常的堆栈跟踪。
阅读如何发布Buggy应用程序(并实时讲述故事),了解更多关于处理现场错误的信息。
logcat-在Android Studio的开发阶段检查日志
首先清除logcat,让应用程序再次崩溃,这样您只能得到崩溃的日志详细信息。你必须检查堆栈跟踪
While, Unfortunately, MyApp has stopped. There are many reasons for it. You can check same in logs. For this, you can use the Log.e("TAG","Message");
应用程序崩溃期间的常见错误如下:
要解决应用程序崩溃错误:
- 记住以上几点,并仔细阅读。
- 有了这个错误,您还可以得到蓝色的文件名(点击它们并从错误中跳转到代码)。
人们会犯错,因此也会编码。
当出现任何
确保如果创建一个新的
如果添加权限,也在