e.printStackTrace ();в строке - PullRequest
       8

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

47 голосов
/ 30 августа 2011

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

Ответы [ 5 ]

104 голосов
/ 30 августа 2011

Используйте следующий фрагмент кода:

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

Раньше был способ извлечь трассировку стека исключений в строку в одну строку с помощью вызова Log.getStackTraceString.Но, начиная с Android 4.0 (API 14), этот метод больше не является надежным, так как возвращает пустую строку для UnknownHostException (подробнее см. Android , выпуск # 21436 ): «чтобы уменьшить количество журналов, которые приложения делают в условиях отсутствия ошибок, когда сеть недоступна», инженеры Android сделали IMHO сомнительное решение изменить метод Log.getStackTraceString).

Таким образом, лучше использовать код, который я предоставил в начале этого поста.

58 голосов
/ 31 августа 2011
import android.util.Log;

...

String stackTrace = Log.getStackTraceString(e);
6 голосов
/ 30 августа 2011

Это выполнимо, но не делай этого. Показать только сообщение об ошибке (даже это слишком много для «реальных» пользователей), полная трассировка стека должна идти только в журнал.

0 голосов
/ 30 августа 2011

В вашем обработчике исключений используйте:

StringWriter sw = new StringWriter();
PrintWriter pw = new PrintWriter(sw);

e.printStackTrace(pw);

whateverFunctionYouLikeToPrintYourStackTrace(sw.getBuffer().toString());

Однако вам гораздо лучше использовать ADB с logcat, потому что трассировки стека на тостах выглядят ужасно.

0 голосов
/ 30 августа 2011

вы можете распечатать трассировку стека в поток и прочитать из него.

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    PrintWriter pw = new PrintWriter(baos);

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

или вы можете использовать StringWriter вместо ByteArrayOutputStream.

...