异常消息是否为空?

我的代码中有一个语句。在我的 catch 块中,我调用以打印异常的消息。但是,会不断返回空值。有趣的是,当我打电话时,我打印堆栈跟踪没有问题。try-catche.getMessage()e.getMessagee.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
}

导致我的问题的原因是什么?我该如何解决?


答案 1

消息和堆栈跟踪是两条不同的信息。虽然堆栈是必需的,但消息不是必需的。大多数异常都带有消息,这是最佳做法,但有些例外只是没有,并且无需执行任何操作来修复它。

但是,您可以使客户端更容易,并通过包装无消息异常或以原始异常作为原因引发自定义异常来提供消息。这可能如下所示。

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

答案 2

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

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

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

而不是询问信息。


推荐