PDA

Ver la Versión Completa : Mejores prácticas para el uso de try y catch


WHK
23/02/15, 17:28:07
Hola, una pregunta, digamos que tengo una clase la cual tiene 5 funciones en la cual cada función trae llamadas a funciones nativas de Android para manipular archivos, bases de datos, etc.

La función que manipula base de datos trae una función que obligadamente debo encerrar dentro de un try catch, cuando el código cae dentro de un catch que es lo mejor? utilizar un control propio de errores para comunicar a la clase que hubo un error? hacer que la misma función ejecute un throw?

Suponiendo que lo óptimo es que mi función ejecute un throw, como puedo ejecutarlo desde la misma función para que la clase haga el control y no la función?

Por ejemplo, tengo la clase de datos de personas y cuando obtiene los datos desde internet vía json es necesario encapsular dentro de un try catch, como puedo hacer que ahora la función ejecute un throw para que la clase controle el problema? ya que la función de json me obliga a encerrar el código dentro del try catch y dentro del catch no puedo ejecutar un new throw.

Por ejemplo:

public void demo() throws Exception
{
try{
// ...
String nombre = json_object.getString("nombre");

}catch(Exception e){
// ???
}
}

La idea es que desde la clase principal pueda decir por ejemjplo:

try{
demo();
}catch(Exception e){
// Toast con el mensaje de error e.getessage...
}

mocelet
23/02/15, 18:27:43
Si el método lo declaras como "throws Exception" ya no es necesario que hagas un try/catch dentro del método para capturar posibles excepciones pues, sea del tipo que sea (todas heredan de Exception), se propagará automáticamente en caso de lanzarse.

Dónde es mejor tratar una excepción depende de cómo tengas estructurado el programa. Lo importante es que se entere quien se tenga que enterar, y que no se entere al que le da igual.

WHK
23/02/15, 19:20:54
Hola gracias, lo hice declarando la función como throws Exception pero igual el android studio me marca de rojo la función jsonObject.getInt() porque no está encerrado bajo ningún try catch y no me deja compilar, lo normal sería que quede sin try catch para que la excepción viaje a través de la función.

http://oi57.tinypic.com/2yjprg8.jpg

WHK
23/02/15, 19:30:06
Creo que ya me di cuenta del problema, es porque estoy llamando a un thron dentro de la función del runnable y no de la función principal :p

El tema es... como hago que el thrown llegue hasta la función superior? ya que al runnable no pude establecer el throws Exception delante de la función.

Braaank
24/02/15, 06:41:56
No entiendo muy bien que es lo que intentas conseguir, pero efectivamente en el run no puedes ponerle un throws debido a que no está especificado así en la interfaz. Yo pondría un try/catch.