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上的堆栈跟踪看起来很糟糕。