2016-09-06 1 views
7

J'utilise un androïde priorité-jobqueue et j'utiliser retrofit pour faire des appels synchrones à mon repos api, mais je ne suis pas sûr comment gérer les erreurs comme 401 erreurs non autorisées que je vous envoie Retour JSON indiquant l'erreur. Simple en faisant des appels asynchrones mais j'adapte mon application pour le gestionnaire de travaux. ci-dessous est une prise d'essai simple pour les exceptions IO, mais 422 de 401 etc? Comment faire ça?Retrofit 2 Erreur d'appel synchrone pour le traitement des erreurs 4xx

try { 
    PostService postService = ServiceGenerator.createService(PostService.class); 
    final Call<Post> call = postService.addPost(post); 
    Post newPost = call.execute().body(); 

    // omitted code here 

} catch (IOException e) { 
    // handle error 
} 

EDIT

L'utilisation de l'objet de réponse de rénovation a été l'argument décisif pour moi, retourner l'objet de réponse de rénovation m'a permis de

Response<Post> response = call.execute(); 

if (response.isSuccessful()) { 
    // request successful (status code 200, 201) 
    Post result = response.body(); 

    // publish the post added event 
    EventBus.getDefault().post(new PostAddedEvent(result)); 
} else { 
    // request not successful (like 400,401,403 etc and 5xx) 
    renderApiError(response); 
} 

Répondre

5

Vérifiez le code de réponse et affiche le message approprié.

Essayez ceci:

PostService postService = ServiceGenerator.createService(PostService.class); 
final Call<Post> call = postService.addPost(post); 

Response<Post> newPostResponse = call.execute(); 

// Here call newPostResponse.code() to get response code 
int statusCode = newPostResponse.code(); 
if(statusCode == 200) 
    Post newPost = newPostResponse.body(); 
else if(statusCode == 401) 
    // Do some thing... 
+0

Merci, en utilisant l'objet de réponse est ce que je avais besoin, cheers :) – CaptRisky

+0

Je suis heureux de vous aider. –

+0

Faire la même chose, je reçois un 'java.lang.NumberFormatException: Invalid double: « »' erreur, car le call.execute retourne un JSON avec des valeurs vides. Je voudrais obtenir le corps du call.execute() et vérifier avant de faire quoi que ce soit d'autre. Quand j'écris quelque chose comme "Réponse newPostResponse = call.execute();" Je reçois une erreur que le corps n'est pas un bon