Сообщение об исключении является нулевым? - PullRequest
29 голосов
/ 23 декабря 2011

В моем коде есть оператор 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
}

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

Ответы [ 5 ]

21 голосов
/ 23 декабря 2011

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

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

throw new  MyRuntimeException("Socket was closed unexpectedly", e);
9 голосов
/ 23 декабря 2011

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

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

или

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

вместо того, чтобы спрашивать сообщение.

2 голосов
/ 23 декабря 2011

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

1 голос
/ 23 декабря 2011

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

1 голос
/ 23 декабря 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...