0

Как преобразовать e.printStackTrace() в строку?

8

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

4 ответ(ов)

0

Вы можете вывести стек вызовов в поток и прочитать его содержимое. Вот пример, как это можно реализовать:

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

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

Также вы можете использовать StringWriter вместо ByteArrayOutputStream. Вот как это будет выглядеть:

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

e.printStackTrace(pw);
String stackTrace = sw.toString();

Оба способа позволят вам получить строковое представление стека вызовов исключения. Выберите тот, который вам больше подходит.

0

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

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

e.printStackTrace(pw);

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

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

0

В вашем коде вызов метода Log.getStackTraceString(e) используется для получения строкового представления трассировки стека исключения e. Этот метод позволяет вам удобно вывести информацию об ошибке, включая уровень вложенности вызовов методов, что может быть особенно полезно для отладки.

Вот пример, как это может выглядеть в контексте:

try {
    // ваш код, который может вызвать исключение
} catch (Exception e) {
    String stackTrace = Log.getStackTraceString(e);
    Log.e("TAG", "Произошла ошибка: " + stackTrace);
}

В примере выше, когда возникает исключение, мы обрабатываем его в блоке catch и выводим трассировку стека в лог с помощью Log.e(), что позволяет вам видеть, где именно произошла ошибка.

0

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

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь