android 异常消息为空?

kxe2p93d  于 2023-08-01  发布在  Android
关注(0)|答案(5)|浏览(126)

我的代码中有一条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
}

字符串
我的问题可能是由什么引起的呢?我该怎么解决呢?

xbp102n0

xbp102n01#

消息和堆栈跟踪是两个不同的信息。虽然stackstrace是强制性的,但消息不是。大多数异常都带有一个信息,这是最好的做法,但有些异常就是没有,也没有什么可以修复的。
但是,您可以通过 Package 无消息异常或抛出一个以原始异常为原因的自定义异常来提供消息,从而使客户端更容易。这可能看起来像是跟随。

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

字符串

uqcuzwp8

uqcuzwp82#

SocketTimeOutException是异常的类型。“这可能只是因为这个异常(或引发它的代码)没有费心提供异常的消息,并且认为异常的类型足够有意义。使用方式

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

字符串
或者是

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


而不是询问消息。

mitkmikd

mitkmikd3#

e.printStackTrace()表示几乎总是存在的实际堆栈跟踪。一个消息,但不是。如果检查getMessage()方法的Javadoc,您会注意到它可能返回null。如果使用String消息参数Exception Javadoc从异常调用构造函数,则会有消息

lstz6jyr

lstz6jyr4#

尝试将异常本身交给日志记录器,而不是e.getMessage()。日志记录器通常具有期望Throwable对象的方法,并且日志记录器的默认配置(通常)打印堆栈跟踪。

llmtgqce

llmtgqce5#

我认为代码中抛出的异常没有消息。字符串为空。当然,您也可以打印堆栈跟踪。这是两码事。您将看到堆栈跟踪,但没有消息。

相关问题