2016-01-22 3 views
0

Mon API est le retour sur le succès:Rénovation code d'erreur JSON

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

Et en cas d'erreur:

{"error_code": 1} 

Mon interface rétrofit retourne l'objet utilisateur. Mais en cas d'erreur, tous les champs User sont définis sur null. Comment puis-je obtenir le code d'erreur? (Sans ajouter champ error_code à l'objet utilisateur)

Voici la décélération de la fonction:

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

Et l'appel:

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

Quel code de réponse votre API retourne-t-il en cas d'erreur? – Blackbelt

+0

code_erreur! = 0 –

+0

Jetez un oeil sur [ces articles] (https://futurestud.io/blog/retrofit-2-simple-error-handling) – oleynikd

Répondre

0

I résolvez-le avec la classe parent qui contient le champ error_code et tous les objets API héritent de ce parent.

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

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

} 

Dans le bloc onResponse(..) {}, appelez:

if(response.body().hasError()) { 
    Toast("Error:"); 
} 
+0

Cela fera probablement le travail (remarquez que j'écris aussi à ce sujet dans la question), mais je suis sûr que Retrofit a une façon plus générique de gérer les erreurs. –