2016-06-06 19 views
0

Ich bin eine API in Android mit Retrofit verbrauchen. Die Erfolgsantwort sieht anders aus als die Fehler/Fehler-Antwort. Wie kann ich das erreichen?Retrofit - andere Antwort

Im Moment habe ich etwas zu diesem beeinflussen:

Call<AuthenticateUserResponse> authenticateUser(String id); 

Antwort

1

Sie können Ihre Antworten mit einer Basis Antwort erweitern und überprüfen, ob ein Fehler vorliegt oder es gelingt. Hier ist ein Beispiel Basis Antwort Bohne unter:

public class BaseResponse { 
    @SerializedName("ResponseCode") 
    private int code; 
    @SerializedName("ResponseMessage") 
    private String message; 
    @SerializedName("ResponseText") 
    private String text; 
} 

Mein api kehrt ResponseCode, ResponseMessage und ResponseText in jedem Responder und ich verlängern meine Antworten von BaseResponse Bohne und prüfen, ob ein Fehler vorliegt.

Sie können Ihre Antworten als Rückgabeschemas Ihrer API ändern.

Edit: Hier ist Ihre Antwort für Ihre Api:

public class Error { 
     @SerializedName("ResponseCode") 
     private int code; 
     @SerializedName("ResponseMessage") 
     private String message; 
     @SerializedName("ResponseText") 
     private String text; 
    } 

public class YourWrapperResponse { 
     @SerializedName("Error") 
     private Error error; 
     @SerializedName("AuthenticateUserResponse") 
     private AuthenticateUserResponse authenticateUserResponse; 
    } 

Und Ihr Anruf wird wie:

Call<YourWrapperResponse> authenticateUser(String id); 

Das obige Beispiel i Sie gab ein Beispiel für Griff Geschäfts Fehler, die Sie erhalten, in Ihrer jede erfolgreiche Antwort. Erfolgreich bedeutet Http Status 200. Auch Sie müssen diese Error object nicht in Ihre Antwort zurückgeben. Wenn es einen Fehler gibt können Sie in Ihrer Antwort zurückkehren.

In Retrofit 2.0 + müssen Sie überprüfen, ob Ihre Anfrage erfolgreich ist. Hier ein Beispiel dazu:

Call<User> auth = YourApiProvider.getInstance().getServices().auth(userName, passowrd, grantType); 
      auth.enqueue(new Callback<User>() { 
       @Override 
       public void onResponse(Call<User> call, Response<User> response) { 
        if (response.isSuccessful()) { 
         // Here you get a 200 from your server. 
         } 
        } else { 
         // Here you get an authentication error. 
         // You can get error with response.code(); 
         // You can get your error with response.errorBody(); 
         // or you can get raw response with response.raw() 
        } 
       } 

       @Override 
       public void onFailure(Call<User> call, Throwable t) { 
        // Here you get error such as TimeOut etc. 
       } 
      }); 

Ich hoffe, dass dir das weiterhilft. Viel Glück!

+0

Die API, die ich verwende, gibt ein Fehler-Objekt zurück, wenn es fehlschlägt, und zeigt es nicht an, wenn es erfolgreich ist. Wird Ihre Herangehensweise an Unterklassen noch funktionieren? Oder wird es einen Fehler geben, der sagt, dass es kein Objekt wie "Fehler" gibt, wenn es erfolgreich ist? – Subby

+0

Wenn es erfolgreich ist, wird es Ihr Objekt zuordnen. Und wenn es keinen Fehler gibt, wird es nicht sagen, dass es kein Objekt wie Fehler gibt. Also ich denke, wenn Sie Ihre Fehler-Objekt-Basis-Antwort setzen, werden Sie keine Probleme bekommen. – savepopulation

+0

Es scheint, dass Retrofit nicht serialisiert, wenn die Anforderung fehlschlägt, d. H. 401. Wenn die Anforderung erfolgreich ist, wird sie serialisiert. Fehle ich etwas Konfiguration oder etwas? – Subby