Существует метод e.printStackTrace()
для печати исключительной ошибки, поэтому я хотел бы сделать полное исключение в String
и показать его Toast.makeText()
Как я могу это сделать?
Если есть более альтернативная идея, то, пожалуйста, поделитесь со мной или предложите мне.
E.printStackTrace(); в строке
Ответ 1
Используйте следующий фрагмент кода:
Writer writer = new StringWriter();
exception.printStackTrace(new PrintWriter(writer));
String s = writer.toString();
Раньше существовал способ извлечь исключение stacktrace в строку в одной строке с вызовом Log.getStackTraceString
. Но начиная с Android 4.0 (API 14) этот метод не является надежным больше, поскольку возвращает пустую строку для UnknownHostException
(см. Android issue # 21436, вкратце: "чтобы уменьшить количество ловушек, которые делают приложения в состоянии, отличном от ошибки в сети, недоступны" Инженеры Android сделали IMHO сомнительным решением изменить метод Log.getStackTraceString
).
Таким образом, лучше использовать код, который я предоставил в начале этого сообщения.
Ответ 2
import android.util.Log;
...
String stackTrace = Log.getStackTraceString(e);
Ответ 3
Это выполнимо, но не делайте этого. Покажите только сообщение об ошибке (даже это слишком важно для "реальных" пользователей), полная трассировка стека должна идти только в журнал.
Ответ 4
вы можете распечатать трассировку стека на поток и прочитать его.
ByteArrayOutputStream baos = new ByteArrayOutputStream();
PrintWriter pw = new PrintWriter(baos);
e.printStackTrace(pw);
String stachTrace = new String(baos.toByteArray());
или вы можете использовать StringWriter вместо ByteArrayOutputStream.
Ответ 5
В вашем обработчике исключений используйте:
StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);
e.printStackTrace(pw);
whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString());
Однако вам гораздо лучше использовать ADB с logcat, потому что трассировки стека на тоста выглядят ужасно.