web-dev-qa-db-fra.com

e.printStackTrace (); en ficelle

Il existe une méthode e.printStackTrace() pour imprimer une erreur exceptionnelle, aussi je voudrais prendre une exception entière dans String et l'afficher par Toast.makeText()
Comment puis-je faire ceci?
S'il y a plus d'idées alternatives, alors s'il vous plaît partagez avec moi ou suggérez-moi.

45
Nikunj Patel

Utilisez le code suivant:

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

Auparavant, il était possible d'extraire un stacktrace d'exception dans la chaîne en une ligne avec l'appel Log.getStackTraceString. Mais à partir d’Android 4.0 (API 14), cette méthode n’est plus fiable, car elle renvoie une chaîne vide pour UnknownHostException (voir Android numéro n ° 21436 pour les détails, bref: "pour réduire le montant "Les ingénieurs Android ont pris à mon humble avis une décision douteuse en modifiant la méthode Log.getStackTraceString). 

Il est donc préférable d’utiliser le code que j’ai fourni au début de cet article.

102
Idolon
import Android.util.Log;

...

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

C'est faisable, mais ne fais pas ça. Afficher uniquement le message d'erreur (même si c'est trop pour les "vrais" utilisateurs), la trace complète de la pile ne doit aller que dans le journal.

6
Nikolay Elenkov

vous pouvez imprimer la trace de la pile dans un flux et en lire le contenu.

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

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

ou vous pouvez utiliser un StringWriter à la place de ByteArrayOutputStream.

0
Anantha Sharma

Dans votre gestionnaire d'exception, utilisez:

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

e.printStackTrace(pw);

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

Cependant, vous feriez bien mieux d’utiliser ADB avec logcat, car les traces de pile sur Toasts ont une mine terrible.

0
Chiguireitor