2016-06-06 3 views
0

Я использую API в Android с помощью Retrofit. Ответ на успех отличается от ответа об ошибке/сбое. Как я могу таким образом достичь этого?Retrofit - Different Response

настоящее время у меня что-то на это влияет:

Call<AuthenticateUserResponse> authenticateUser(String id); 

ответ

1

Вы можете расширить свои ответы с базой ответов и проверить, есть ли ошибка или это удастся. Вот пример базового ответа боб ниже:

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

Мой апи возвращает ResponseCode, ResponseMessage и ResponseText в каждом responser и я выражаю свои ответы BaseResponse фасоли и проверить, если есть ошибка.

Вы можете изменить ваши ответы как свои схемы возврата api.

Edit: Вот ваш ответ для Апи:

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; 
    } 

И ваш звонок будет как:

Call<YourWrapperResponse> authenticateUser(String id); 

В приведенном выше примере я дал вам пример ошибок бизнес-ручки, которые вы получаете в каждом успешном ответе. Успешные средства Http Status 200. Также вам не нужно возвращать этот Error object в каждом ответе. Если есть ошибка, вы можете вернуться в свой ответ.

В Retrofit 2.0+ вам необходимо проверить, был ли ваш запрос успешным. Ниже приведен пример ниже:

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. 
       } 
      }); 

Надеюсь, это поможет вам. Удачи!

+0

API, который я использую, возвращает объект Error, когда он терпит неудачу, и не показывает его, когда он преуспевает. Будет ли ваш подход к подклассу работать? Или это вызовет ошибку, говоря, что нет такого объекта, как «Ошибка», когда он преуспеет? – Subby

+0

Когда это удастся, он отобразит ваш объект. И если нет ошибки, он не скажет, что нет такого объекта, как Ошибка. Поэтому я думаю, что если вы поместите свой объект Error в его базовый ответ, у вас не будет никаких проблем. – savepopulation

+0

Кажется, что Retrofit не сериализуется, если запрос терпит неудачу, т. Е. 401. Если запрос завершен, он сериализуется. Я не хватает какой-то конфигурации или чего-то еще? – Subby

Смежные вопросы