残念ながらMyAppが停止してしまいました。どうすれば解決できますか?

java android debugging kotlin crash


アプリを開発しているのですが、実行するたびにメッセージが出てきます。

残念ながらMyAppは停止してしまいました。

これを解決するにはどうしたらいいのでしょうか?


この質問について-明らかにスタックトレースとは何かからインスピレーションを得て、それを使用してアプリケーションエラーをデバッグする方法を教えてください。 、それ以上の詳細なしで彼らのアプリケーションがクラッシュしたことを述べている多くの質問があります。 この質問は、初心なAndroidプログラマーに問題を自分で解決する方法や、適切な質問をする方法を教えることを目的としています。





Answer 1 nhaarman


この回答では、スタックトレースを取得するプロセスについて説明します。 スタックトレースはすでにありますか? 「スタックトレースとは何ですか。また、それを使用してアプリケーションエラーをデバッグするにはどうすればよいですか? 」のスタックトレースについて読んでください。

問題点

キャッチされていない RuntimeException がスローされたため、アプリケーションが終了しました。
これらの中で最も一般的なのは NullPointerException です。

どうやって解決するのか?

Androidアプリケーションがクラッシュするたびに(または、任意のJavaアプリケーションが)、 Stack trace がコンソール(この場合はlogcat)に書き込まれます。 このスタックトレースには、問題を解決するための重要な情報が含まれています。

アンドロイドスタジオ

Finding the stack trace in Android Studio

ウィンドウの下部のバーで、[ Logcat ]ボタンをクリックします。 または、alt+6。 [ Devices ]パネルでエミュレータまたはデバイスが選択されていることを確認します。 次に、赤で表示されているスタックトレースを見つけます。 logcatには多くのものが記録されている可能性があるため、少しスクロールする必要がある場合があります。 スタックトレースを見つける簡単な方法は、logcatをクリアし(右側のごみ箱を使用)、アプリを再度クラッシュさせることです。

スタックトレースを見つけました、次は何ですか?

やったー!問題解決への道のりが半分になりましたね。
スタックトレースを分析することで、アプリケーションをクラッシュさせた原因を見つける必要があります。

「スタックトレースとは何ですか。また、それを使用してアプリケーションエラーをデバッグするにはどうすればよいですか? 」のスタックトレースについて読んでください。

未だに自分の問題が解決しない!

Exception とそれが発生した行を見つけても、それを修正する方法がわからない場合は、StackOverflowで遠慮なく質問してください。

スタックトレースと関連するコード(例: Exception をスローした行までの数行)を投稿してください。




Answer 2 Vlad Bezden


GoogleのADBツールを使用して Logcat file を取得し、問題を分析できます 。

adb logcat > logcat.txt

logcat.txt ファイルを開き、アプリケーション名を検索します。 失敗した理由、行番号、クラス名などの情報があるはずです。




Answer 3 Hiren Vaghela


まず、アプリがクラッシュした時点を確認します( Unfortunately, MyApp has stopped. )。 これには、 Log.e("TAG", "Message"); 使用できます。 、この行を使用すると、logcatでアプリのログを確認できます。

その後、あなたのアプリが停止しているポイントを見つけて、あなたの側で解決するのは非常に簡単です。




Answer 4 Rahil Ali


ログキャットでエラーを確認するだけです。

eclipseではlog catオプションを取得しています。

ウィンドウ->ビューを表示->その他-> Android-> Logcat

ログキャットにはエラーが含まれています。

その他の方法としては、デバッグモードでアプリケーションを実行してエラーを確認することもできます。その後、まずブレークポイントを設定します。

プロジェクトを右クリック->デバッグ-> Androidアプリケーション




Answer 5 Ab_


注: この回答はAndroid Studio 2.2.2を使用しています

注2: デバイスが正常に接続されたと考えています。


アプリケーションがクラッシュしたときに最初にすることは、LogCatを見ることです,Android Studioの下部にはメニューのリストを持つツールバーがあります.

image

Android Monitor」(上の画像で下線を引いたやつです ^ ^)をクリックしてください。

さて、こんな感じのものが出てきます。

image

Verbose 」を「 Error 」に変更します。これで、ログに記録されたエラーのみが表示されます。 これらのすべてのエラーについて(気づいた場合)心配する必要はありません。

image

OK。 次に、アプリをクラッシュさせるために行った操作を実行します。 アプリがクラッシュしたら、logcatに移動します。 たとえば、多くの at:x.x.x あり、 Caused by: TrumpIsPresidentException である新しいクラッシュログを見つける必要があります。 Logcatの Caused by: ステートメントに移動します。

image

その Caused By: 横に 、発生した例外があるはずです。 私の場合、それは RuntimeException であり、その下に次のような青いリンクを含む行があるはずです 。

image

それによって Caused by: 場合:その下のどこかに青いテキストを含む行がない場合は、別の Caused by: 探します:それはそうです。

その青いリンクをクリックします。 問題が発生した場所に移動するはずです。 私の場合、それはこの行が原因でした:

throw new RuntimeException();

だから、なぜそれがクラッシュしているのかわかった。 自分で例外を投げているからです。 これは明らかなエラーでした。


しかし、別のエラーが出たとしましょう。

java.lang.NullPointerException

ログキャットをチェックして青いリンクをクリックしたら、ここにたどり着きました。

mTextView.setText(myString);

だから今はデバッグしたい。 このStackOverflowの質問によると、NullPointerExceptionは何かが null であることを示しています 。

それでは、 nullとは何かを調べてみましょう。 2つの可能性があります。 mTextView がnullであるか、 myString がnullです。 調べるために、 mTextView.setText(mString) 行の前に、次の2行を追加します。

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.
  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の右上にある[フィルターなし]ドロップダウンメニューをクリックします。 「フィルター構成の編集」を選択し、フィルターに名前を付け、「ログタグ」に「アプリのデバッグ」を入力します。 「OK」をクリックします。 これで、logcatに2行が表示されます。

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

これでmTextViewがnullであることがわかりました。

私は自分のコードを観察して、今、私は何かに気づく。

クラスの最上部で private TextView mTextView 宣言されています。 しかし、私はそれを定義していません。

基本的にはonCreate()でこれを忘れていました。

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

そのため、 mTextView がnullである理由は、アプリにそれを教えるのを忘れたためです。 そのため、その行を追加してアプリを実行すると、アプリがクラッシュしなくなりました。