Java 不幸的是,MyApp已经停止。我怎样才能解决这个问题?
我正在开发一个应用程序,每次运行它时,我都会收到以下信息: 不幸的是,MyApp已经停止 我能做些什么来解决这个问题Java 不幸的是,MyApp已经停止。我怎样才能解决这个问题?,java,android,debugging,kotlin,Java,Android,Debugging,Kotlin,我正在开发一个应用程序,每次运行它时,我都会收到以下信息: 不幸的是,MyApp已经停止 我能做些什么来解决这个问题 关于这个问题-显然是受到启发,有很多问题表明他们的应用程序已经崩溃,没有任何进一步的细节。此问题旨在指导Android新手程序员如何尝试自己解决问题,或提出正确的问题。此答案描述了检索堆栈跟踪的过程。已经有堆栈跟踪了吗?读取“”中的堆栈跟踪 问题 您的应用程序退出,因为引发了未捕获的运行时异常。 其中最常见的是 如何解决? 每次Android应用程序崩溃(或任何Java应用程序
关于这个问题-显然是受到启发,有很多问题表明他们的应用程序已经崩溃,没有任何进一步的细节。此问题旨在指导Android新手程序员如何尝试自己解决问题,或提出正确的问题。此答案描述了检索堆栈跟踪的过程。已经有堆栈跟踪了吗?读取“”中的堆栈跟踪 问题 您的应用程序退出,因为引发了未捕获的运行时异常。
其中最常见的是 如何解决? 每次Android应用程序崩溃(或任何Java应用程序崩溃)时,都会将
堆栈跟踪写入控制台(在本例中为logcat)。此堆栈跟踪包含解决问题的重要信息
安卓工作室
在窗口的底部栏中,单击Logcat
按钮。或者,您可以按alt+6。确保在Devices
面板中选择了仿真器或设备。接下来,尝试查找堆栈跟踪,它显示为红色。可能有很多东西登录到logcat,所以您可能需要滚动一点。查找堆栈跟踪的一个简单方法是清除logcat(使用右侧的回收站),然后让应用程序再次崩溃
我找到了堆栈跟踪,现在怎么办?
耶!你的问题已经解决了一半。
通过分析堆栈跟踪,您只需找出到底是什么导致了应用程序崩溃
读取“”中的堆栈跟踪
我还是不能解决我的问题!
如果您已经找到了您的异常
以及发生异常的行,但仍然无法确定如何修复它,请毫不犹豫地询问有关StackOverflow的问题
尽量简明扼要:发布堆栈跟踪和相关代码(例如,在引发异常的行之前的几行)。首先,检查应用程序崩溃的点(不幸的是,MyApp已停止。
)。为此,您可以使用Log.e(“标记”、“消息”)代码>,使用此行可以在logcat中查看应用程序日志
在那之后,你会发现你的应用程序停止了哪一点,这很容易在你身边解决 您也可以自行获取此错误消息,而无需任何堆栈跟踪或任何进一步的错误消息
在这种情况下,您需要确保正确配置了Android清单(包括库中发生的任何清单合并以及库中可能发生的任何活动),并特别注意应用程序中显示在清单文件中的第一个活动。您可以使用获取Logcat文件来分析问题
adb logcat > logcat.txt
打开logcat.txt
文件并搜索应用程序名称。应该有关于失败原因、行号、类名等的信息。只需检查日志cat中的错误即可
在eclipse中,您可以从中获得log cat选项:
窗口->显示视图->其他->安卓->日志猫
日志cat包含错误
另外,您还可以通过在调试模式下执行应用程序来检查错误。
首先设置断点,然后执行以下操作:
右键单击project->debug as->Android应用程序
检查您的Logcat
消息并查看您的Manifest
文件。应该缺少一些东西,如定义活动、
用户权限等。您必须检查堆栈跟踪
怎么做?
在IDE上检查windows窗体LOGCAT
如果看不到logcat窗口,请转到此路径并将其打开
window->show view->others->Android->Logcat
如果您正在使用Google Api,请转到此路径
adb logcat>logcat.txt您可以使用以下任何工具:
亚洲开发银行日志
adb logcat>logs.txt(您可以使用编辑器打开和搜索错误。)
eclipse logcat(如果在eclipse中不可见,请转到Windows->Show View->Others->Android->logcat)
Android调试监视器或Android设备监视器(键入commandMonitor或通过UI打开)
安卓工作室
我建议使用安卓调试监视器,这很好。因为当有太多日志时,eclipse会挂起,并且通过adb logcat筛选器和所有操作都很困难。使用logcat并尝试查找导致应用程序崩溃的原因
要查看Logcat,请使用Android Studio,然后按ALT+6
或
如果使用Eclipse
窗口->打开透视->其他-LogCat
转到LogCat,从下拉菜单中选择错误。这将包含帮助您调试所需的所有信息。如果没有帮助,请将日志猫作为问题的编辑发布,有人会帮你解决问题。让我分享一下当你遇到强制关闭(应用程序停止工作)时的基本日志猫分析
文档
Android收集/分析日志的基本工具是logcat
Android的页面是关于logcat的吗
如果你使用android Studio,你也可以检查这个
捕获
基本上,您可以使用以下命令手动捕获logcat(或者只需检查AndroidStudio中的AndroidMonitor窗口):
有很多参数可以添加到命令中,帮助您筛选和显示所需的消息。。。这是私人的。。。我总是使用下面的命令来获取消息时间戳:
adb logcat -v time
您可以将输出重定向到文件,并在文本编辑器中对其进行分析
分析
如果你的应用程序崩溃,你会得到如下结果:
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.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
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)
throw new RuntimeException();
java.lang.NullPointerException
mTextView.setText(myString);
Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);
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
yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false
mTextView = (TextView) findViewById(R.id.textview_id_in_xml);
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();
}
gradlew build > log.txt 2>details.txt
Texture texture = new Texture("myImage.png");