Код ошибки дооснащения JSON

Мой API возвращается в случае успеха:

{"error_code": 0, "last_login": "2016-01-18T22:27:20.342Z", "facebook_id": "1", "id": 1, ..}

И по ошибке:

{"error_code": 1}

Мой модифицированный интерфейс возвращает объект пользователя. Но в случае ошибки все поля пользователя обнуляются. Как я могу получить код ошибки? (без добавления поля error_code в объект User)

Вот функция замедления:

@GET("/login")
Call<User> login (@Query("facebook_id") String facebook_id);

И звонок:

Call<User> call = apiService.login("2");
    call.enqueue(new Callback<User>() {
        @Override
        public void onResponse(Response<User> response) {
            // Here I wan't to check somehow the error_code
            User user = response.body();
            Toast.makeText(context, "OK!", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onFailure(Throwable t) {
            Toast.makeText(context, "Failed!", Toast.LENGTH_SHORT).show();
            t.printStackTrace();
        }
    });

person Ori Seri    schedule 22.01.2016    source источник
comment
какой код ответа возвращает ваш API в случае ошибки?   -  person Blackbelt    schedule 22.01.2016
comment
Взгляните на эти статьи   -  person oleynikd    schedule 13.06.2016


Ответы (2)


Я решаю это с помощью родительского класса, который содержит поле error_code, и все объекты API наследуются от этого родителя.

person Ori Seri    schedule 16.03.2016

public class User {
    public int error_code;
    //other keys like last_login

    public boolean hasError (){
        return error_code == 0;
    }

}

В блоке onResponse(..) {} вызовите:

if(response.body().hasError()) {
    Toast("Error:");
} 
person Ozgur    schedule 22.01.2016
comment
Это, вероятно, сделает работу (обратите внимание, что я также пишу об этом в вопросе), но я уверен, что у Retrofit есть более общий способ обработки ошибок. - person Ori Seri; 23.01.2016