Подтвердить что ты не робот

Сообщение об исключении - null?

У меня есть оператор try-catch в моем коде. В моем блоке catch я звоню e.getMessage(), чтобы напечатать сообщение об исключении. Однако e.getMessage сохраняет возвращаемое значение. Интересно, что при вызове e.printStackTrace, у меня нет проблем с печатью трассировки стека.

Ниже мой код:

try
{
    console = new BufferedReader(new InputStreamReader(httpsURLConnection.getInputStream()));
}catch(Exception e)
{
    Log.d("Error", "Error Message: " + e.getMessage()); //e.getMessage is returning a null value
    e.printStackTrace(); //this works. is displaying a SocketTimeOutException
}

Что может быть причиной моей проблемы? Как его решить?

4b9b3361

Ответ 1

Сообщение и stacktrace - это две разные части информации. Хотя stackstrace является обязательным, сообщение не является. Большинство исключений несут сообщение, и это самая лучшая практика для этого, но некоторые просто не делают и нечего делать, чтобы исправить это.

Вы можете сделать это проще для своих клиентов и предоставить сообщение, обернув исключение без сообщений или выбросив в качестве причины исключительное исключение с исходным исключением. Это может выглядеть следующим образом.

throw new  MyRuntimeException("Socket was closed unexpectedly", e);

Ответ 2

SocketTimeOutException - тип исключения. Вероятно, именно это исключение (или код, бросающий его) не беспокоило предоставление сообщения за исключением, и считал, что тип исключения был достаточно значимым. Используйте

Log.d("Error", "Error Message: " + e);

или

Log.d("Error", "Some exception occurred", e);

вместо запроса сообщения.

Ответ 3

e.printstacktrace() означает фактический стек, который почти всегда присутствует. Однако сообщения нет. Если вы проверите Javadoc метода getMessage(), вы заметите, что он может вернуть значение null. Будет сообщение, если вы вызовите конструктор из исключения с сообщением String param Exception Javadoc

Ответ 4

Попробуйте дать исключение самому журналу вместо e.getMessage(). Обычно у регистраторов есть методы, которые ожидают, что Throwable objects и конфигурации по умолчанию (обычно) регистраторов распечатывают трассировку стека.

Ответ 5

Я думаю, что Исключение, которое выбрасывается в ваш код, не имеет сообщения. Строка имеет значение NULL. Но, конечно, вы можете распечатать трассировку стека. Это два разных мнения. Вы увидите трассировку стека, но без сообщения.