Ich habe diese Frage in den Android-Entwicklergruppen gepostet, aber ich wollte sie hier für andere Leute posten, die vielleicht vor einem Designproblem wie ich stehen:
Ich war auf der Suche nach einem Idiom oder Paradigma, wie man HTTP-Fehler zu behandeln.
Im Grunde genommen,
Ich habe eine AsyncTask, die in einem Hintergrund-Thread läuft, der eine statische Methode von mir namens executeRequest() aufruft.
Dies alles wird im doInBackground()-Teil erledigt. Es gibt zwei Arten von Ausnahmen, die von executeRequest() ausgelöst werden können. Eine IOException für alle Kommunikationsfehler und eine ServerErrorResponse-Ausnahme, die meine eigene Ausnahme ist. Diese kann z.B. auftreten, wenn der Client etwas Schlechtes an den Server geschickt hat, das ganze HTTP funktioniert hat, aber der Server sich beschwert hat (vielleicht habe ich einen ungültigen Parameter oder eine ungültige ID übergeben).
Ich habe also das Ergebnis in ein eigenes "Ergebnisobjekt" verpackt.
In onPostExecute() prüfe ich, ob das Ergebnis fehlgeschlagen ist, und versuche dann, es im UI-Thread zu verarbeiten. Allerdings muss ich jetzt anfangen, die
Exception e = result.getException();
if (e != null) {
if (e instanceof IOException) { //network error
//handle network error here
} else if (e instanceof ServerErrorResponseException) {
//handle server error response here
}
Wie Sie sehen können, ist dies immer ärgerlich, für jede neue Ausnahme muss ich es mit instanceof überprüfen. Gibt es eine Möglichkeit, es zu umgehen oder ein Design, das ich folgen könnte, um dies zu vermeiden? Ich möchte, dass die Ausnahmen im UI-Thread verarbeitet werden, für den Fall, dass ich ein Dialogfeld oder etwas für den Benutzer anzeigen.
Irgendwelche Ideen?