有e.printStackTrace()
种方法可以打印异常错误,因此我想在String
中取整个异常并按Toast.makeText()
显示
我怎么能这样做?
如果还有其他想法,请与我分享或建议我。
答案 0 :(得分:102)
使用以下代码:
Writer writer = new StringWriter();
exception.printStackTrace(new PrintWriter(writer));
String s = writer.toString();
以前有一种方法可以通过Log.getStackTraceString
调用将异常堆栈跟踪提取到一行中的String中。但是从Android 4.0(API 14)开始,该方法不再可靠,UnknownHostException
为Log.getStackTraceString
(详见Android it returns an empty string,简而言之:“减少日志量应用程序在网络不可用的非错误情况下执行“Android工程师让恕我直言,这是一个修改{{1}}方法的可疑决定”。
因此,最好使用我在本文开头提供的代码。
答案 1 :(得分:58)
import android.util.Log;
...
String stackTrace = Log.getStackTraceString(e);
答案 2 :(得分:6)
这是可行的,但不要这样做。只显示错误消息(即使对于'真实'用户来说太多了),完整堆栈跟踪应仅转到日志。
答案 3 :(得分:0)
您可以将堆栈跟踪打印到流&从中读取。
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintWriter pw = new PrintWriter(baos);
e.printStackTrace(pw);
String stachTrace = new String(baos.toByteArray());
或者您可以使用StringWriter代替ByteArrayOutputStream。
答案 4 :(得分:0)
在您的异常处理程序中使用:
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString());
但是,使用ADB和logcat会更好,因为Toasts上的堆栈跟踪看起来很糟糕。