我的代码中有一条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条答案
按热度按时间xbp102n01#
消息和堆栈跟踪是两个不同的信息。虽然stackstrace是强制性的,但消息不是。大多数异常都带有一个信息,这是最好的做法,但有些异常就是没有,也没有什么可以修复的。
但是,您可以通过 Package 无消息异常或抛出一个以原始异常为原因的自定义异常来提供消息,从而使客户端更容易。这可能看起来像是跟随。
字符串
uqcuzwp82#
SocketTimeOutException是异常的类型。“这可能只是因为这个异常(或引发它的代码)没有费心提供异常的消息,并且认为异常的类型足够有意义。使用方式
字符串
或者是
型
而不是询问消息。
mitkmikd3#
e.printStackTrace()
表示几乎总是存在的实际堆栈跟踪。一个消息,但不是。如果检查getMessage()方法的Javadoc,您会注意到它可能返回null。如果使用String消息参数Exception Javadoc从异常调用构造函数,则会有消息lstz6jyr4#
尝试将异常本身交给日志记录器,而不是e.getMessage()。日志记录器通常具有期望Throwable对象的方法,并且日志记录器的默认配置(通常)打印堆栈跟踪。
llmtgqce5#
我认为代码中抛出的异常没有消息。字符串为空。当然,您也可以打印堆栈跟踪。这是两码事。您将看到堆栈跟踪,但没有消息。