不同的对象,但如果在Retrofit 2.1.0中的response.isSuccessfull()的条件仍然进入

时间:2016-11-18 06:15:22

标签: android retrofit2

我正在使用Retrofit 2.1.0与Jackson进行API调用。 远程api给出了两个不同的响应,它具有带字符串的json对象和一个自定义对象。和另一个响应只有状态和错误消息。如下

必填回复

{
  "status": "success",
  "data": {
    "id": 79068,
    "username": "neha.fren01@gmail.com",
    "email": "neha.fren01@gmail.com",
    "enabled": false,
    "confirmation_token": "27090745",
    "name": "ronem",
    "premium": false,
    "token": "nmdgZe5Put6kS1KC_KH5d8Tk-fZLxZ15bV5tahJwQlY",
    "phone_verified": false,
    "email_verified": false
  }
}

错误回复

{
  "status": "error",
  "message": "Unable to create userERROR: Email you entered is invalid. Provide another email.\n"
}

我可以处理上面显示的必需响应。但无法处理错误响应

以下是我打电话的代码

call.enqueue(new Callback<RegisteredResponse>() {
            @Override
            public void onResponse(Call<RegisteredResponse> call, Response<RegisteredResponse> response) {
                if (response.isSuccessful()) {
                    try {

                        EventBus.post(new Events.RegistrationResponseEvent(StaticStorage.REGISTRATION_IDENTIFIER, response.body()));

                    } catch (Exception e) {
                        e.printStackTrace();

//                        EventBus.post(new Events.ErrorEvent(StaticStorage.REGISTRATION_IDENTIFIER, response.errorBody().toString()));
                    }
                }else{
//                  I want to handle error response here.but error response is present inside response.isSuccessful() block
                }
            }

            @Override
            public void onFailure(Call<RegisteredResponse> call, Throwable t) {
                t.printStackTrace();
                EventBus.post(new Events.ErrorEvent(StaticStorage.REGISTRATION_IDENTIFIER, StaticStorage.ERROR_IN_LOADING));
            }
        });

即使是响应对象错误响应也始终转到

  

response.isSuccessful()

我无法解决此问题。我失去了2个小时搜索解决方案 我跟着this链接

2 个答案:

答案 0 :(得分:0)

response.isSuccessful()

Retrofit取决于您从服务器获取的状态代码。如果服务器仍然向您发送200 responseCode,即使失败,那么您也无法在onError

中获取它

意味着您的api通话成功并且响应来了。服务器的响应无关紧要。为此,您必须手动解析响应并检查您的Json对象是否具有errorsuccess状态。

答案 1 :(得分:0)

根据我的意见,您必须对所有Web服务进行通用响应。喜欢

Sucess

{
  "status": true,
  "data": {
    "id": 79068,
    "username": "neha.fren01@gmail.com",
    "email": "neha.fren01@gmail.com",
    "enabled": false,
    "confirmation_token": "27090745",
    "name": "ronem",
    "premium": false,
    "token": "nmdgZe5Put6kS1KC_KH5d8Tk-fZLxZ15bV5tahJwQlY",
    "phone_verified": false,
    "email_verified": false
  }
  "message": ""
}

错误

{
  "status": false,
  "data":{},
  "message": "Unable to create userERROR: Email you entered is invalid. Provide another email.\n"
}

请更改为状态布尔标志,您必须检查响应的状态。如果是,那么如果为false则响应成功,则响应中存在一些错误。

response.isSuccessful()

而不是上面你需要检查服务器响应的状态代码,如果它是200,则成功调用Web服务。