e.printStackTrace(); 在string中

e.printStackTrace()方法来打印exception的错误,所以我想在String取整个exception,并通过Toast.makeText()
我怎样才能做到这一点?
如果有更多的替代想法,那么请与我分享或build议我。

使用下面的一段代码:

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

过去有一种方法可以通过Log.getStackTraceString调用将一个exceptionLog.getStackTraceString提取到一行中。 但从Android 4.0(API 14)开始,该方法不再可靠,因为它为UnknownHostException 返回一个空string (详情请参阅Android issue#21436 ,简而言之:“减less应用程序在非错误的networking条件不可用“Android工程师让恕我直言,一个可疑的决定,修改Log.getStackTraceString方法)。

因此,最好使用我在本文开头提供的代码。

 import android.util.Log; ... String stackTrace = Log.getStackTraceString(e); 

这是可行的,但不要这样做。 只显示错误信息(即使对于“真正的”用户来说也是太多了),完整的堆栈跟踪应该只能进入日志。

您可以将堆栈跟踪打印到一个stream中并从中读取。

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

或者您可以使用StringWriter来代替ByteArrayOutputStream。

在你的exception处理程序使用:

 StringWriter sw = new StringWriter(); PrintWriter pw = new PrintWriter(sw); e.printStackTrace(pw); whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString()); 

不过,使用ADB和logcat会更好,因为Toasts上的堆栈跟踪看起来很糟糕。