Código de ejemplo para manejar Excepciones
Soy nuevo en el desarrollo de aplicaciones móviles de Android. Me gustaría saber, ¿cómo puedo manejar excepciones como HttpConnection
relacionados con las excepciones o cualquier otra excepción? ¿Necesito mostrar un AlertDialog
al usuario?
Sírvase proporcionar un código de ejemplo o un código fuente de proyecto sobre cómo puedo manejar HttpConnection
o un tipo similar de excepciones.
- ¿Qué es un evento de presionar las mejillas?
- Explicación del método getPixels para un mapa de bits en Android
- Error de Mobile SDK: OPERATION_NOT_ALLOWED
- fije el ancho y la altura como porcentaje en el diseño relativo
- Redondeando la mitad con formato decimal en Android
- ¿Cómo anular la lista de cifrado enviada al servidor por Android cuando se utiliza HttpsURLConnection?
- No se puede importar el punto final del motor de la aplicación en mi EndpointsAsyncClass en Android Studio
- No se puede importar com.google.api.client.json.jackson.JacksonFactory
- ¿Cómo puedo detectar un clic en un oyente onTouch?
- Java.net.SocketTimeoutException (ANDROID)
- Cómo gestionar varias tareas asíncronas de forma eficiente en Android
- Cómo hacer RTSP servidor en el teléfono android?
- Prueba onActivityResult ()
La forma en que maneja la excepción depende de la excepción. Si la excepción es algo que no se puede recuperar, y el usuario necesita saber acerca de entonces podría capturar la excepción y mostrarlo en un AlertDialog:
try { // do something } catch (SomeImportantException e) { AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("User friendly text explaining what went wrong."); AlertDialog alert = builder.create(); alert.show(); }
Para obtener más información sobre el diálogo, consulte la creación de cuadros de diálogo .
Alternativamente, si la excepción es algo que puede tratar, sólo puede registrar información sobre la excepción y seguir adelante.
try { // do something } catch (SomeLessImportantException e) { Log.d(tag, "Failed to do something: " + e.getMessage()); }
Existen 2 tipos diferentes de excepciones en Java: comprobado y no seleccionado. Hay un gran debate sobre cuál es mejor usar, ambos argumentos son buenos.
Básicamente una excepción Checked se deriva de java.lang.Exception
y requiere que si no especifica su método como "throws MyCheckedException", entonces debe capturar y manejar la excepción dentro de su método.
// throw the exception void foo() throws MyCheckedException { throw new MyCheckedException(); } // or handle the exception void foo() { try { throw new MyCheckedException(); } catch (MyRuntimeException e) { e.printStackTrace(); } }
Una excepción no verificada, derivada de java.lang.RuntimeException
, no requiere que especifique "tiros" en la definición de método ni que lo maneje.
void foo() { throw new MyUncheckedException(); }
La ventaja de Checked es que el compilador le avisará cuando no haya manejado una excepción.
La desventaja es que tienes que declarar un bloque try / catch o un throws para cada excepción Checked, y el código de nivel superior puede ser bastante engorroso, tratando de manejar todos los diferentes tipos de excepciones.
Por esta razón, si es cuidadoso, puede que prefiera utilizar excepciones no comprobadas.
BTW, sólo puede elegir su tipo de excepción cuando defina su propia.
Al encontrar Excepciones de Java o una biblioteca de terceros, usted tiene que decidir cómo manejarlo. Por ejemplo, si un método de terceros lanza CheckedException1, debe manejarlo o declarar el método de llamada como "lanza CheckedException1". Si desea evitar el uso de Excepciones comprobadas, puede envolverla en una excepción no comprobada y lanzarla.
void foo() // no throws declaration { try { thirdPartyObj.thirdPartyMethod(); // this throws CheckedException1 } catch (CheckedException1 e) { throw new MyUncheckedException(e); // this will wrap the checked in an unchecked. } }
Tenga en cuenta que puede lanzar la excepción sin comprobar sin la declaración "tiros". Para acceder al CheckedException1 original desde la parte superior, puede utilizar el método .getCause () de su excepción Unchecked.
void caller() { try { foo(); } catch (MyUncheckedException e) { CheckedException1 ce1 = e.getCause(); ce1.printStackTrace(); } }
… pero debido a que la excepción de foo () es Unchecked, no tiene que manejarla o declarar "throws".
En cuanto a la tala, hay diferentes escuelas de pensamiento en esto.
- Registrarlo cuando se produce la excepción (nivel bajo)
- Registrarlo cuando llegue a la parte superior (alto nivel)
- Registrela cuando tenga suficiente información para realizar una acción apropiada y / o un mensaje de registro. (nivel medio)
Una buena política que he encontrado es instalar un manejador de excepción no capturado que se encargará de todas las excepciones no capturadas (obviamente no comprobadas). De esta manera, cualquier cosa que se pierda se registrará y se manejará potencialmente antes de bloquear el sistema.
public class MyExceptionHandler implements UncaughtExceptionHandler { @Override public void uncaughtException(Thread thread, Throwable ex) { ex.printStackTrace(); } } // In your high-level code Thread.setDefaultUncaughtExceptionHandler(new MyExceptionHandler());
Y todas las excepciones que se pueden manejar con gracia, captura y manejar en un módulo donde se sabe lo suficiente sobre la situación para posiblemente corregir el problema y vuelva a intentarlo.
Puede utilizar el complemento ACRA que ofrece esta funcionalidad o BugSense para recopilar informes de errores. Descargo de responsabilidad: Soy un fundador en BugSense.
- Cómo obtener mi dispositivo Android Carga de la carpeta de descarga interna
- Sleep () en java (Android)