问题:不幸的是MyApp已停止。我该如何解决?

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

很遗憾,MyApp已停止。

我该怎么办?


关于此问题-明显受什么是堆栈跟踪,如何使用它来调试应用程序错误?,有很多问题表明它们的应用程序崩溃了,没有任何问题更多细节。这个问题旨在指导Android新手如何自行解决问题或提出正确的问题。

标签:java,android,debugging,kotlin,crash

回答1:

此答案描述了检索堆栈跟踪的过程。已经有堆栈跟踪了吗?在" 什么是堆栈跟踪,如何使用它来调试应用程序错误?"

问题

您的应用程序退出是因为引发了未捕获的RuntimeException
其中最常见的是 NullPointerException

如何解决?

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

Android Studio

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

我已经找到了堆栈跟踪,现在呢?

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

在" 什么是堆栈跟踪,如何使用它来调试应用程序错误?"

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

如果您找到了Exception及其发生的行,但仍然找不到解决方法,请立即在StackOverflow上提问。

尽量简洁:发布堆栈跟踪和相关代码(例如,与引发Exception的行相距几行)。 / p>

回答2:

您可以使用 Google的ADB工具来获取Logcat文件分析问题。

adb logcat > logcat.txt

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

回答3:

首先,您检查您的应用崩溃了(不幸的是,MyApp已停止.)。为此,您可以使用Log.e("TAG","Message");,使用此行可以在logcat中看到您的应用程序日志。

此后,您发现您的应用停止了哪一点,这很容易在您身边解决。

回答4:

只需检查日志猫中的错误。

您从Eclipse中获得了log cat选项:

窗口->显示视图->其他-> Android-> Logcat

Log cat包含错误。

否则,您还可以通过在调试模式下执行应用程序来检查错误。首先,通过以下操作设置断点:

右键单击项目->调试为-> Android应用程序

回答5:

注意: 此答案使用的是Android Studio 2.2.2

注意2: 我正在考虑您的设备已成功连接。


当应用程序崩溃时,您要做的第一件事就是查看LogCat,在Android Studio的底部,有一个带有菜单列表的工具栏:

单击" Android监视器"(我在上图中加下划线的那个。^)

现在,您会得到类似这样的信息:

将" 详细"更改为" 错误",现在它将仅向您显示记录的错误。现在不用担心所有这些错误(如果有)。

好的。现在,执行崩溃应用程序的操作。应用崩溃后,转到日志目录。例如,您应该在一个新的崩溃日志中找到很多at:x.x.x:和Causeby:TrumpIsPresidentException。转到日志猫中的Causeby:原因。

旁边的原因:,应该有发生的异常。在我的情况下,这是一个RuntimeException,并且在其下的 中应该有一行包含蓝色链接的行,例如:

如果该由以下原因引起: 在其下的某处没有一行带有蓝色文本的行,则查找另一由<引起的可以。

点击该蓝色链接。它应该带您到发生问题的位置。就我而言,这是由于以下原因:

throw new RuntimeException();

所以,现在我知道为什么它崩溃了。这是因为我自己抛出了异常。 这是一个明显的错误


但是,假设我遇到了另一个错误:

java.lang.NullPointerException

我检查了我的logcat,单击了它给我的蓝色链接,然后把我带到了这里:

mTextView.setText(myString);

所以,现在我要调试。根据此StackOverflow问题,它是NullPointerException说是null

所以,让我们找出什么是空。有两种可能性。 mTextView为空,或者myString为空。为了找出答案,在mTextView.setText(mString)行之前,我添加了以下两行:

Log.d("AppDebug","mTextView is null: " + String.valueOf(mTextView == null);
Log.d("AppDebug","myString is null: " + String.valueOf(myString== null);

现在,像以前一样(将Verose更改为Error),我们希望将" Error"更改为" Debug"。由于我们正在通过调试进行记录。这是所有Log方法:

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

因此,由于我们使用了Log.d,因此我们正在检查Debug。这就是为什么我们将其更改为调试。

通知Log.d具有第一个参数,在我们的示例中为" AppDebug"。单击logcat右上方的"无过滤器"下拉菜单。选择"编辑过滤器配置",为过滤器命名,然后在"日志标签"中放置"应用程序调试"。点击"确定"。现在,您应该在logcat中看到两行:

yourPackageNameAndApp: mTextView is null: true
yourPackageNameAndApp: myString is null: false

所以现在我们知道mTextView为null。

我观察了我的代码,现在我注意到了。

我在课程顶部声明了privateTextViewmTextView。但是,我没有定义它。

基本上我忘了在onCreate()中执行此操作:

mTextView = (TextView) findViewById(R.id.textview_id_in_xml);

所以这就是mTextView为null的原因,因为我忘了告诉我的应用了什么。因此,我添加了这一行,运行我的应用程序,现在该应用程序不会崩溃。


回答6:

仅当您在代码中遇到致命异常并停止执行应用程序时,才会显示此弹出窗口。可能是任何异常NullPointerExceptionOutOfMemoryException等。

如果您仍在Android Studio中开发应用程序,则最好的检查方法是通过 Logcat ,这是读取堆栈跟踪并检查应用程序原因的快速方法。

如果您的应用已经启用,则不能使用 logcat 。因此,为此,您可以实现Crashlytics来为您提供有关发生的任何异常的错误报告。

回答7:

检查您的Logcat消息并查看您的Manifest文件。应该缺少一些东西,例如定义Activity, User权限等,

回答8:

您可以使用以下任何工具:

  1. adb logcat

  2. adb logcat> logs.txt(您可以使用编辑器打开和搜索错误。)

  3. eclipse logcat(如果在eclipse中不可见,请转到Windows-> Show View-> Others-> Android-> LogCat)

  4. Android调试监视器或Android设备监视器(键入命令 monitor 或通过UI打开)

  1. Android Studio

我建议使用 Android调试监视器,这很好。因为当日志太多,通过adb logcat过滤器时eclipse挂起,一切都很困难。

回答9:

您必须检查堆栈跟踪

该怎么做?

在您的IDE上,检查Windows窗体LOGCAT

如果看不到logcat窗口,请转到此路径并打开

window->show view->others->Android->Logcat

如果您使用的是Google-Api,请转到此路径

adb logcat> logcat.txt

回答10:

在下面的showToast()方法中,您必须通过传递上下文或应用程序上下文的另一个参数来尝试使用它。

  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();
}

回答11:

让我分享有关遇到强制关闭(应用程序停止运行时)的基本Logcat分析。

DOCS

logcat是Android收集/分析日志的基本工具。

这里是关于logcat的Android页面

如果您使用的是Android Studio,还可以检查 LINK

捕获

基本上,您可以使用以下命令手动捕获logcat(或仅检查AndroidStudio中的AndroidMonitor窗口):

adb logcat

您可以在命令中添加很多参数,这些参数可以帮助您过滤和显示所需的消息...这是个人的...我总是使用以下命令来获取消息时间戳:

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-0908:29:13.475

检查问题何时发生很重要...您可能在日志中发现一些错误...您必须确保检查的是正确的消息:)

  • 哪个应用崩溃了:com.example.khan.abc

这样,您就知道哪个应用程序崩溃了(以确保您正在检查有关消息的日志)

  • 哪个错误:java.lang.NullPointerException

NULL指针异常错误

  • 有关该错误的详细信息:尝试在空对象引用上调用虚拟方法'voidandroid.support.v4.app.FragmentActivity.onBackPressed()'

您试图从FragmentActivity对象调用方法onBackPressed()。但是,执行此操作时该对象为null

  • 堆栈跟踪:堆栈跟踪向您显示方法的调用顺序...有时,错误发生在调用方法(而不是被调用方法)中。

    在com.example中。 khan.abc.AudioFragment $ 1.onClick(AudioFragment.java:125)

文件com.example.khan.abc.AudioFragment.java中的错误发生在onClick()方法中的第125行( stacktrace显示发生错误的行)

它的调用者是:

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)

等...

概述

这只是概述...并非所有日志都很简单,等等...只是为了分享想法并为您提供入门级信息...

希望我能以某种方式帮助您...问候

回答12:

使用 LogCat 并尝试查找导致应用程序崩溃的原因。

要查看Logcat(如果您使用的是 Android Studio ),然后按 ALT + 6

如果您使用 Eclipse ,然后使用 Window-> Open Perspective-> Other-LogCat

转到LogCat,从下拉菜单中选择错误。这将包含所有必需的信息以帮助您进行调试。如果这样没有帮助,请将LogCat作为您问题的编辑内容发布,有人会帮助您。

回答13:

如果您的应用由于某种原因崩溃而没有良好的堆栈跟踪。尝试从第一行进行调试,然后逐行进行调试直到崩溃。然后您将得到答案,哪条线会给您带来麻烦。然后,您可以将其包装到try catch块中,并输出错误输出。

回答14:

您也可以单独获得此错误消息,而无需任何堆栈跟踪或任何其他错误消息。

在这种情况下,您需要确保正确配置了Android清单(包括库中发生的所有清单合并以及库中发生的所有活动),并特别注意应用程序中显示的第一个活动您的清单文件。

回答15:

开发过程中崩溃

尝试使用我喜欢的工具 logview 来获取日志并进行分析在开发过程中。
在Linux中运行时,请确保将./logview./lib/logview.jar标记为可执行文件。

如果您不喜欢它,则有很多替代方法 Android桌面日志查看器

>

在野外崩溃

集成实时崩溃报告工具,例如 Firebase Crashlytics ,以获取堆栈跟踪在用户设备上发生的未处理异常的情况。

阅读如何发布Buggy应用程序(并现场讲述故事)以了解有关处理现场错误的更多信息。

回答16:

人们会犯错误,因此也会编码。

如果发生任何错误,请始终检查带有红色文本的logcat,但是您可以在其中找到带有下划线的蓝色文本的实际问题红色文本。

请确保您是否创建新的activity,请始终在AndroidManifest文件中声明activity

如果添加权限,请在AndroidMainifest文件中声明它。

回答17:

Logcat -要在Android Studio的开发阶段检查日志

最初清除Logcat并再次使应用程序崩溃,因此您只能获取崩溃的日志详细信息。您必须检查堆栈跟踪

不幸的是,MyApp已停止。原因很多。您可以在日志中检查它们。为此,您可以使用Log.e(" TAG"," Message");

应用崩溃时常见的错误,例如:

  1. 编码错误(错误使用关键字)。
  2. 不匹配的属性名称。
  3. 不支持的插件(也许)。
  4. 不匹配的版本(也许)。
  5. AndroidManifest文件中缺少活动。
  6. AndroidManifest文件中缺少权限。
  7. 最常见的NullPointerException。
  8. 已声明但未定义。

要解决应用崩溃错误:

  • 记住以上几点,并仔细研究。
  • 出现错误时,您还将获得蓝色的文件名(单击它们,并从发生错误的地方跳转到代码)。

回答18:

首先,您需要检查应用程序崩溃的位置和原因。(不幸的是,MyApp已停止.).借助LOG,您可以找到它。找出出了什么问题。

在那之后,您发现您的应用停止从哪个角度修复该问题。

回答19:

如果您的终端上没有任何有趣的日志(或者它们与您的应用没有直接关系),则可能是由于本机库引起的。在这种情况下,您应该检查终端中的"逻辑删除"文件。

逻辑删除文件的默认位置取决于每个设备,但是如果是这样,您将有一条日志告诉:逻辑删除写入:/data/tombstones/tombstone_06

有关更多信息,请检查 https://source.android.com/devices/tech / debug

回到顶部