4 Stimmen

Bewährte Verfahren für die Behandlung von HTTP-Fehleraufrufen

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?

3voto

erickson Punkte 256579
Exception e = result.getException();
if (e != null) {
  try {
    throw e;
  } catch (IOException ex) {
    //handle network error here
  } catch (ServerErrorResponseException ex) {
    //handle server error response here
  } catch (Exception ex) {
    //handle RuntimeException and others here
    //(You weren't just going to ignore them, were you?)
  }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X