e.printStackTrace();在字符串中

时间:2011-08-30 11:43:42

标签: java android stack-trace

e.printStackTrace()种方法可以打印异常错误,因此我想在String中取整个异常并按Toast.makeText()显示 我怎么能这样做?
如果还有其他想法,请与我分享或建议我。

5 个答案:

答案 0 :(得分:102)

使用以下代码:

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

以前有一种方法可以通过Log.getStackTraceString调用将异常堆栈跟踪提取到一行中的String中。但是从Android 4.0(API 14)开始,该方法不再可靠,UnknownHostExceptionLog.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上的堆栈跟踪看起来很糟糕。