例外エラーを出力するe.printStackTrace()
メソッドがあるので、String
で例外全体を取得し、Toast.makeText()
で表示したい
これどうやってするの?
他のアイデアがある場合は、私と共有または提案してください。
次のコードを使用します。
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
メソッドを変更するという疑わしい決定)。
したがって、この投稿の冒頭で提供したコードを使用することをお勧めします。
import Android.util.Log;
...
String stackTrace = Log.getStackTraceString(e);
それは実行可能ですが、これを実行しないでください。エラーメッセージのみを表示します(「実際の」ユーザーにとっては大きすぎる場合でも)、完全なスタックトレースはログのみに記録されます。
スタックトレースをストリームに出力し、ストリームから読み取ることができます。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintWriter pw = new PrintWriter(baos);
e.printStackTrace(pw);
String stachTrace = new String(baos.toByteArray());
または、ByteArrayOutputStreamの代わりにStringWriterを使用できます。
例外ハンドラーで次を使用します。
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString());
ただし、Toastのスタックトレースはひどいように見えるため、logcatでADBを使用する方がはるかに優れています。