有e.printStackTrace()
方法可以打印异常错误,因此我想将整个异常信息存入String
并使用Toast.makeText()
显示。
我该怎么做?
如果还有其他备选方案,请与我分享或建议我。
有e.printStackTrace()
方法可以打印异常错误,因此我想将整个异常信息存入String
并使用Toast.makeText()
显示。
我该怎么做?
如果还有其他备选方案,请与我分享或建议我。
使用以下的代码片段:
Writer writer = new StringWriter();
exception.printStackTrace(new PrintWriter(writer));
String s = writer.toString();
自从Android 4.0(API 14)开始,使用Log.getStackTraceString
调用一行代码将异常堆栈跟踪提取为字符串不再可靠。原因是该方法对于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());
或者您可以使用StringWriter代替ByteArrayOutputStream。
在你的异常处理程序中使用:
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString());
然而,使用ADB和logcat会更好,因为Toast上的堆栈跟踪看起来很糟糕。