it-swarm.com.de

e.printStackTrace (); in einer Schnur

Es gibt eine e.printStackTrace()-Methode, um einen außergewöhnlichen Fehler zu drucken, daher möchte ich die gesamte Ausnahme in String nehmen und sie durch Toast.makeText() anzeigen
Wie kann ich das machen?
Wenn es weitere alternative Ideen gibt, dann teilen Sie es mir bitte mit oder schlagen Sie mir vor.

45
Nikunj Patel

Verwenden Sie den folgenden Code:

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

Früher gab es eine Möglichkeit, mit Log.getStackTraceString-Aufruf ein Ausnahme-Stacktrace in einer Zeile in den String zu extrahieren. Aber ab Android 4.0 (API 14) ist diese Methode nicht mehr zuverlässig, da sie gibt einen leeren String zurück für UnknownHostException (siehe Android Ausgabe # 21436 für die Details, kurz: "um den Betrag zu reduzieren.) Die Protokollauswürfe, die Apps im fehlerfreien Zustand des Netzwerks durchführen, sind nicht verfügbar. "Android-Ingenieure haben IMHO zu einer zweifelhaften Entscheidung für die Änderung der Log.getStackTraceString-Methode gemacht. 

Daher ist es besser, den Code zu verwenden, den ich zu Beginn dieses Beitrags bereitgestellt habe.

102
Idolon
import Android.util.Log;

...

String stackTrace = Log.getStackTraceString(e);
55
Macondo2Seattle

Es ist machbar, aber mach das nicht. Zeigt nur die Fehlermeldung an (auch wenn dies für 'echte' Benutzer zu viel ist), sollte der vollständige Stack-Trace nur ins Protokoll gehen.

6
Nikolay Elenkov

sie können die Stack-Ablaufverfolgung in einem Stream ausdrucken und daraus lesen.

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

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

oder Sie können einen StringWriter anstelle von ByteArrayOutputStream verwenden.

0
Anantha Sharma

Verwenden Sie in Ihrem Ausnahmehandler Folgendes:

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

e.printStackTrace(pw);

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

Es ist jedoch viel besser, ADB mit logcat zu verwenden, da Stack-Spuren auf Toasts schrecklich aussehen.

0
Chiguireitor