53 votes

e.printStackTrace(); string

Il y a e.printStackTrace() méthode d'impression exceptionnelle d'erreur, donc je voudrais prendre toute exception en String et qui le montrent en Toast.makeText()
Comment puis-je faire cela?
Si il y a plus de suppléant idée, alors s'il vous plaît de partager avec moi ou me suggérer.

113voto

Idolon Points 11503

Utilisez le morceau de code suivant:

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

 

Mise à jour

Comme indiqué par @BlackRider dans sa réponse il existe une meilleure façon d'extraire une exception stacktrace dans la Chaîne de caractères (mais sur Android 4.x il n'est pas toujours fiable, vérifier la mise à Jour 2 ci-dessous):

String stackTrace = Log.getStackTraceString(exception);

Selon la source, android.util.Log.getStackTraceString méthode est exactement la même chose que le code que j'ai posté ci-dessus. C'est une pratique un liner pour obtenir la représentation de chaîne de l'exception stacktrace dans Android.

Mise à jour 2
Mais à partir d'Android 4.0 (API 14). Log.getStackTraceString méthode n'est pas fiable en plus, comme elle renvoie une chaîne vide pour UnknownHostException (voir Android question n ° 21436). Il est donc préférable d'utiliser le code que j'ai fourni au début de ce post.

65voto

BlackRider Points 7347
import android.util.Log;

...

String stackTrace = Log.getStackTraceString(e);

6voto

Nikolay Elenkov Points 32843

C'est faisable, mais ne pas le faire. Juste montrer le message d'erreur (même ce qui est beaucoup trop pour les "vrais" utilisateurs), la totalité de trace de la pile devrait aller pour le journal ne.

0voto

Anantha Sharma Points 4217

vous pouvez imprimer la trace de la pile à un jet & lire.

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

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

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

0voto

Chiguireitor Points 1006

Dans votre gestionnaire d'exception utiliser:

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

e.printStackTrace(pw);

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

Cependant, vous êtes beaucoup mieux à l'aide de la BAD avec logcat, parce que les traces de pile sur des Toasts look terrible.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X