web-dev-qa-db-ja.com

e.printStackTrace();文字列で

例外エラーを出力するe.printStackTrace()メソッドがあるので、Stringで例外全体を取得し、Toast.makeText()で表示したい
これどうやってするの?
他のアイデアがある場合は、私と共有または提案してください。

48
Nikunj Patel

次のコードを使用します。

Writer writer = new StringWriter();
exception.printStackTrace(new PrintWriter(writer));
String s = writer.toString();

以前は、Log.getStackTraceString呼び出しを使用して、1行の文字列に例外スタックトレースを抽出する方法がありました。ただし、Android 4.0(API 14)以降、そのメソッドは 空の文字列を返す for UnknownHostExceptionとして信頼できなくなりました(Androidを参照) _ 問題#21436 要するに、「ネットワークが利用できないエラー状態でないときにアプリが実行するログの量を減らすため」Androidエンジニア私見Log.getStackTraceStringメソッドを変更するという疑わしい決定)。

したがって、この投稿の冒頭で提供したコードを使用することをお勧めします。

105
Idolon
import Android.util.Log;

...

String stackTrace = Log.getStackTraceString(e);
58
Macondo2Seattle

それは実行可能ですが、これを実行しないでください。エラーメッセージのみを表示します(「実際の」ユーザーにとっては大きすぎる場合でも)、完全なスタックトレースはログのみに記録されます。

6
Nikolay Elenkov

スタックトレースをストリームに出力し、ストリームから読み取ることができます。

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintWriter pw = new PrintWriter(baos);

e.printStackTrace(pw);
String stachTrace = new String(baos.toByteArray());

または、ByteArrayOutputStreamの代わりにStringWriterを使用できます。

0
Anantha Sharma

例外ハンドラーで次を使用します。

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);

e.printStackTrace(pw);

whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString());

ただし、Toastのスタックトレースはひどいように見えるため、logcatでADBを使用する方がはるかに優れています。

0
Chiguireitor