2016-04-22 8 views
6

, wenn ich Benutzer die OkHttp Bibliothek mit einer asynchronen Art und Weise wie folgt aus:OkHttp Antwortstatuscode in onFailure Methode

call.enqueue(new Callback() { 
     @Override 
     public void onFailure(Call call, IOException e) { 
      e.printStackTrace(); 
     } 

     @Override 
     public void onResponse(Call call, Response response) throws IOException { 

     } 
    }); 

Im onFailure Methode, wie ich die Antwortstatuscode erhalten auf verschiedene Fehler zu unterscheiden. Zum Beispiel, Netzwerkfehler oder Serverfehler?

+2

OnFaliure-Methode deckt nur Ausnahme wie Timeout etc .. Wenn Sie Antwortfehler wie 400 fangen möchten, können Sie Statuscode von onResponse-Methode response.code() erreichen –

Antwort

4

Soweit ich mich erinnere, onFailure wird ausgelöst, wenn Sie keine Antwort erhalten. Wenn Sie also einen Fehler erhalten, wird onResponse aufgerufen. Sie können in onResponse etwas tun:

@Override 
public void onResponse(Call call, Response response) throws IOException { 
    switch(response.code()){ 
    //your desired catched codes here. 

    } 
} 

Und official doc für onResponse Methode:

Beachten Sie, dass die Transportschicht Erfolg (ein HTTP-Antwortcode empfangen, Kopf- und Körper) nicht unbedingt angeben Anwendung -Schichtenerfolg: Antwort kann immer noch auf einen unglücklichen HTTP-Antwortcode wie 404 oder 500 hinweisen.

+1

Dank @skadoosh für die Bereitstellung der Docs-Link. – yennsarah

+0

Vielen Dank für Ihre Antwort! @Amy – YiFeng

4

https://github.com/square/okhttp/issues/1769

Nach dem Link, oben wird onFailure() genannt, wenn und nur wenn es mit den Kunden Probleme.

Wenn die Anfrage erfolgreich zugestellt wurde, aber ein Serverproblem vorliegt, können Sie response.isSuccessful() überprüfen. Wenn es false zurückgibt, überprüfen Sie response.code() und behandeln Sie den Fehler.

0

Sie überprüfen das mit response.code() Sie können auch response.message() verwenden, um weitere Informationen zu erhalten.