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.
- AsyncTaskLoader no llama a onLoadFinished a menos que devuelva un nuevo objeto en loadInBackground
- ¿Qué hace realmente AsyncTaskLoader.deliverResult ()?
- AsyncTaskLoader onLoadFinished con un cambio de tarea y configuración pendiente
- Diferencia real entre AsyncTask y Thread
- Actualizar la barra de progreso de AsyncTaskLoader?
- AsyncTaskLoader personalizado con caché
- ¿Cómo funciona la cancelación de un AsyncTaskLoader?
- Cómo saber si AsyncTaskLoader se está ejecutando
- Custom AsyncTaskLoader, loadinBackground no se llama después de 5 intentos
- Utilizar LoaderCallback sin Fragmento
- Cómo pasar params a Android AsnycTaskLoader
- Android - Estrategia de grupo de subprocesos y Loader se puede utilizar para implementarlo?
- Prueba de AsyncTaskLoaders con Robolectric
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.