java - source - value cannot be null parameter name inarray
¿El mensaje de excepción es nulo? (5)
Tengo una declaración try-catch
en mi código. En mi bloque catch, estoy llamando a e.getMessage()
para imprimir el mensaje de la excepción. Sin embargo, e.getMessage
sigue devolviendo un valor nulo. Curiosamente, cuando llamo a e.printStackTrace,
no tengo problemas para imprimir el seguimiento de la pila.
A continuación se muestra mi código:
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
}
¿Cuál podría ser la causa de mi problema? ¿Cómo lo resuelvo?
Creo que la excepción que aparece en su código no tiene ningún mensaje. La cadena es nula. Pero, por supuesto, puede imprimir el seguimiento de la pila. Estas son dos cosas diferentes. Verá el seguimiento de la pila, pero sin el mensaje.
El mensaje y el apilamiento son dos datos distintos. Mientras que el stackstrace es obligatorio, el mensaje no lo es. La mayoría de las excepciones llevan un mensaje, y es la mejor práctica hacerlo, pero algunas simplemente no lo hacen y no hay nada que hacer para solucionarlo.
Puede hacer que sea más fácil para sus clientes y proporcionar un mensaje envolviendo la excepción sin mensaje o lanzando una excepción personalizada con la excepción original como la causa. Esto podría parecer como siguiente.
throw new MyRuntimeException("Socket was closed unexpectedly", e);
Intente otorgar la excepción al registrador en lugar de e.getMessage (). Los registradores generalmente tienen métodos que esperan que los objetos Throwable y las configuraciones predeterminadas (en general) de los registradores impriman el seguimiento de la pila.
SocketTimeOutException es el tipo de excepción. Probablemente es solo que esta excepción (o el código que la arrojó) no se molestó en proporcionar un mensaje con la excepción, y pensó que el tipo de excepción era suficientemente significativo. Utilizar
Log.d("Error", "Error Message: " + e);
o
Log.d("Error", "Some exception occurred", e);
En lugar de preguntar el mensaje.
e.printstacktrace () significa el seguimiento real de la pila que casi siempre está presente. Un mensaje sin embargo no. Si getMessage() el Javadoc del método getMessage() , notará que puede devolver un valor nulo. Habrá un mensaje si llama al constructor desde una excepción con el parámetro String message param Exception Javadoc