Quello che abbiamo fatto nel nostro ultimo progetto: creare un involucro che contiene un generico e un excpetion come questo:
public class AsyncTaskResult<T> {
private final T result;
private final Exception error;
//getter & setter
}
cattura tutte le eccezioni nel vostro doInBackground(...)
e comprimerle in involucro risultato (o il risultato, se nessun errore). Nell'interfaccia utente, controlla il wrapper se si tratta di un'eccezione, quindi mostra il messaggio di errore corrispondente, altrimenti compila i campi con il risultato.
Per noi è stata anche una buona pratica definire quali tipi unici di eccezioni ci sono (ad es. Eccezione con un errore recuperabile in cui si mostra solo una finestra di dialogo o un errore dell'app dove è necessario dare un calcio all'utente nel menu principale) e lancia solo questi tipi (nel prendere lo specifico nel tuo asynctask), così non devi preoccuparti di centinaia di eccezioni diverse e anche astrarre la gestione degli errori. Potresti anche fornire chiavi stringa con il messaggio di errore I18n corretto, quindi devi solo scrivere e.getMessage()
Sei mai arrivato da nessuna parte con questo? Sto incontrando lo stesso problema ora che non ho più il valore di ritorno da 'AsyncTask's'' doInBackground' da controllare. – theblang
Io uso per 3a risposta. – Malachiasz