Cómo manejar los errores en AsyncTaskLoader personalizado?

Estoy extendiendo AsyncTaskLoader que utilizo más adelante en un fragmento a través de LoaderManager. ¿Hay manera sugerida de manejar los errores que ocurren durante la tarea asíncrona? Me gustaría hacer un mensaje emergente pidiendo al usuario que cancele o vuelva a intentar cuando se produce un error en la conexión a Internet.

La única forma en la que puedo pensar ahora es hacer que Loader devuelva null al error o envuelva el objeto cargado en otro que tenga código de estado.

Lo que hicimos en nuestro último proyecto: Crear un envoltorio que contiene un genérico y un excpetion como este:

 public class AsyncTaskResult<T> { private final T result; private final Exception error; //getter & setter } 

doInBackground(...) todas las excepciones en su doInBackground(...) y doInBackground(...) al wrapper de resultados (o al resultado si no hay error). En su interfaz de usuario compruebe el envoltorio si es una excepción, a continuación, mostrar el mensaje de error correspondiente, de lo contrario llenar los campos con el resultado.

Para nosotros también era una buena práctica definir qué tipos únicos de excepciones, hay (por ejemplo, excepción con un error recuperable en el que sólo se muestra un cuadro de diálogo o una falla de la aplicación donde se necesita patear al usuario en el menú principal) y sólo tirar estos Tipos (en la captura de la específica en su asynctask), por lo que no tiene que preocuparse de cientos de excepciones diferentes y también abstraer su manejo de errores. También puede proporcionar las claves String con el mensaje de error I18n correcto, por lo que sólo tiene que escribir e.getMessage()

He visto buenos resultados al devolver un objeto compuesto que contiene la carga útil (si la hay) y un código de estado, como usted sugirió. Entonces el Fragment que aloja el AsyncTaskLoader puede mostrar un error apropiado e informativo. Este enfoque tiene la ventaja añadida de que utiliza el ciclo de vida integrado del cargador.

Otra opción es registrar un listener que AsyncTaskLoader notificará cuando se produzcan errores. El SDK de Facebook tiene un ejemplo de uso de escuchas de error con cargadores.

  • Datos fuera de sincronización entre un CursorLoader personalizado y un CursorAdapter respaldando un ListView
  • AsyncTaskLoader no se ejecuta
  • Tipos incompatibles en el método onCreateLoader que trabaja con AsyncTaskLoader y Fragment
  • Volley o ASyncTaskLoader
  • Explique AsyncTaskLoader
  • Androide. Yor propio progreso-bar?
  • Actualizar la interfaz de usuario desde un AsyncTaskLoader
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.