e.printStackTrace(); in string

JavaAndroidStack Trace

Java Problem Overview


There are e.printStackTrace() method to print exceptional error, so I would like to take entire exception in String and show it by Toast.makeText()
How can i do this?
If there are more alternate idea, then please share with me or suggest me.

Java Solutions


Solution 1 - Java

Use the following piece of code:

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

There used to be a way to extract an exception stacktrace into the String in one line with Log.getStackTraceString call. But starting from Android 4.0 (API 14) that method is not reliable anymore, as it returns an empty string for UnknownHostException (see Android issue #21436 for the details, in short: "to reduce the amount of log spew that apps do in the non-error condition of the network being unavailable" Android engineers made IMHO a dubious decision to modify Log.getStackTraceString method).

Thus it is better to use the code I provided at the beginning of this post.

Solution 2 - Java

import android.util.Log;

...

String stackTrace = Log.getStackTraceString(e);

Solution 3 - Java

It's doable, but don't do this. Show just the error message (even that is too much for 'real' users), the full stack trace should go to the log only.

Solution 4 - Java

you can print the stack trace to a stream & read from it.

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

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

or you can use a StringWriter in place of the ByteArrayOutputStream.

Solution 5 - Java

In your exception handler use:

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

e.printStackTrace(pw);

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

However, you're much better off using ADB with logcat, because stack traces on Toasts look terrible.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionNikunj PatelView Question on Stackoverflow
Solution 1 - JavaIdolonView Answer on Stackoverflow
Solution 2 - JavaTotoroTotoroView Answer on Stackoverflow
Solution 3 - JavaNikolay ElenkovView Answer on Stackoverflow
Solution 4 - JavaAnantha SharmaView Answer on Stackoverflow
Solution 5 - JavaChiguireitorView Answer on Stackoverflow