2016-01-22 2 views
0

Мой API является возврат на успех:дооснащения код ошибки JSON

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

И об ошибке:

{"error_code": 1} 

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

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

@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(); 
     } 
    }); 
+0

Какой код ответа является вашим возвратом api в случае ошибки? – Blackbelt

+0

error_code! = 0 –

+0

Посмотрите на [эти статьи] (https://futurestud.io/blog/retrofit-2-simple-error-handling) – oleynikd

ответ

0

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

-2
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:"); 
} 
+0

Это, вероятно, сделает работу (обратите внимание, что я также пишу об этом в вопросе), но я уверен, что Retrofit имеет более общий способ обработки ошибок. –