2015-11-29 8 views
8

Meine Anfrage sollte entweder JSON für POJO oder JSON beschrieben Fehler (kann ungültige Anfrage Felder, Serverprobleme und so weiter).Handle Fehler in Retrofit 2 RX

Aber Nachrüstung im Abonnenten gibt mir nur Throwable. Wie kann ich herausfinden, dass ein Netzwerkfehler, was ist http-Code, und JSON mit Fehler erhalten?

private class ProjectListSubscriber extends Subscriber<ProjectListResponse> { 

    @Override 
    public void onCompleted() { 
    } 

    @Override 
    public void onError(Throwable e) { 
     //is that a network? http code? convert json to error POJO? 
    } 

    @Override 
    public void onNext(ProjectListResponse projectListResponse) { 
     updateProjectList(projectListResponse.getProjectList()); 
    } 
} 

Antwort

10

Da Sie RxJava verwenden, onError wird im Falle von Netzwerkfehlern und Endpunkte bezogener Fehler sind Teil des Response genannt. Im Fehlerfall überprüfen, ob die throwable eine Instanz HttpException

public void onError(Throwable e) { 
    if (e instanceof HttpException) { 

ist, wenn die Prüfung wahr ist, das Sie einen Fehler in Ihrer Anfrage haben. Werfen Sie den Wurf auf HttpException, und der Zugriff ist Mitglieder. Z.B.

((HttpException) e).response().errorBody() 

, wenn der Scheck ist false dann haben Sie einen netzwerkbezogenen Fehler.

+0

Wie kann ich Antwortobjekt in Rx erhalten? – DmitryBorodin

+0

Ich habe meine Antwort bearbeitet – Blackbelt

+0

Danke. Ich habe gerade überprüft - onError callen im Falle von nicht 200 http-Code. Nicht nur Netzwerkfehler. – DmitryBorodin

Verwandte Themen