1

ユーザーがアプリケーションを使用しているときに例外が発生した場合、例外がどこで発生したのかを判断できるようにしたいと考えています。私は同様のti printStackTrace()メソッドをしたいと思います。 (これはビルドモードでデバッグモードではありません)Android。例外処理

現在、私はすべてのクラスのtry-catchステートメントの中にほとんどすべてのメソッドを配置しています(それぞれのメソッドにはすべての命令が含まれています)私は、この時点で、例外が発生した場合、 "ツリー"またはメソッドのスタックを表示できます。しかし、メソッドの内部で例外が発生した場所をより正確に示すために、行番号を決定する方法がありますか? printStackTrace()を使用するときに表示されるものと同様です。

私は実際に例外処理に使用されていませんが、これを行うためのベストプラクティスは何ですか?

EDIT

そしてもうひとつ。ビルドモードでprintStackTrace()を使うと、Logcatが利用できないため、どこにコンテンツが表示されますか?私はその情報を取得することができ、多分それで何かをすることができますか? OR ビルドモードでgetStackTrace()を使用して、String内のものを変換して、おそらくどこかに出力することはできますか?

答えて

3

あなたのコードでは処理されず、リリースモードでアプリケーションをクラッシュさせる例外はすべて、あなたのアプリの近くにあるAndroidデベロッパーコンソールに表示されます。これが機能するために

、あなたは例外処理についてretrace obfuscated stack traces.

にする必要があります:私はあなたがインスタンスのthisを読むことをお勧め。すべてのコードをtry/catchブロックで囲む場合、例外処理について間違いを犯しています。

例外処理はそれよりも細かく、設計上の考慮事項(例外をローカルで処理するか、呼び出し元に返すか)に影響を受けることがよくあります。

:あなたのアプリの中核:あなたのメソッドシグネチャのthrows節を使って、例外を処理しないで投げたり投げたりしましょう。上層のUIでは、try/catchを使用して例外を処理し、エラーが発生した場合は、アプリが安定した状態になっていることを確認し、ユーザーに有用なメッセージを表示します。

詳細(しかし、それほどではない):データベースレイヤで

  • :スロー例外。あなたはまだそれらを捕まえてログに記録することができますが、何かが間違っていたことを発呼者に伝えるためにそれらを投げたり、再投げたりします。
  • ビジネスレイヤー:ビジネス/ドメインモデルが安定した状態になっていることを確認し、エラーから回復して呼び出し元に戻します。
  • UIレイヤー:例外をキャッチし、ユーザーにメッセージを表示します。
+0

これはまさに私がやっていることです。すべての上位レベルのメソッドは例外を処理しますが、すべての低レベルのメソッドは例外を上位レベルに投げます。それが私が方法のツリーを手に入れる方法です。 AがBとBを呼び出す場合はCを呼び出します。例外がCで発生すると、メッセージに値を追加してBにスローし、Bはメッセージに値を追加してAにスローし、Aは同じエラーを表示します。これは良い方法ですか? – AndreiBogdan

+0

いいえ、これはJavaによって自動的に行われます。スタックトレースを読む方法を学んでください:http://www.javasanity.org/understandingthreaddumps – Snicolas

+0

答えで参照を本当に深く読んでください – Snicolas