注:この回答はAndroid Studio 2.2.2を使用しています
注2: デバイスが正常に接続されたと考えています。
アプリケーションがクラッシュしたときに最初に行うことは、LogCatを調べることです。AndroidStudioの下部には、メニューのリストを含むツールバーがあります。
「Android Monitor」(上の画像で下線を引いたものです。^)をクリックしてください。
今、あなたはこのようなものを得るでしょう:
" Verbose
"を " Error
"に変更すると、ログに記録されたエラーのみが表示されます。これらのすべてのエラーについて(気が付いた場合)心配する必要はありません。
OK。次に、アプリをクラッシュさせるために行った操作を実行します。アプリがクラッシュしたら、logcatに移動します。あなたはたくさんの持つ新しいクラッシュログを見つける必要があるat:x.x.x
と:Caused by: TrumpIsPresidentException
たとえば。Caused by:
logcatのそのステートメントに移動します。
次のことCaused By:
、起こった例外があるはずです。私の場合、それはaでRuntimeException
あり、その下に次のような青いリンクを含む行があるはずです。
そのCaused by:
下に青いテキストのある行がない場合は、別の行を探してくださいCaused by:
。
その青いリンクをクリックします。問題が発生した場所に移動するはずです。私の場合、それはこの行が原因でした:
throw new RuntimeException();
だから、なぜそれがクラッシュしているのかわかった。自分で例外を投げているからです。これは明らかなエラーでした。
ただし、別のエラーが発生したとします。
java.lang.NullPointerException
私はlogcatをチェックし、それが私に与えた青いリンクをクリックしました、そしてそれは私をここに連れて行きました:
mTextView.setText(myString);
だから、今デバッグしたい。このStackOverflowの質問によると、NullPointerExceptionは何かが存在することを示していnull
ます。
それでは、nullが何であるかを調べてみましょう。2つの可能性があります。mTextView
nullまたはnullのいずれかですmyString
。見つけるために、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メソッドは次のとおりです。
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がnullです そのため、その行を追加してアプリを実行すると、アプリがクラッシュしなくなりました。