Подтвердить что ты не робот

E.printStackTrace(); в строке

Существует метод e.printStackTrace() для печати исключительной ошибки, поэтому я хотел бы сделать полное исключение в String и показать его Toast.makeText()
Как я могу это сделать?
Если есть более альтернативная идея, то, пожалуйста, поделитесь со мной или предложите мне.

4b9b3361

Ответ 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, потому что трассировки стека на тоста выглядят ужасно.