2016-09-06 71 views
7

Android öncelikli bir iş kullanıyorum ve dinlenme api'ye eşzamanlı çağrılar yapmak için retrofit kullanıyorum ama 401 Yetkisiz hatalar gibi hataları nasıl ele alacağımı bilmiyorum hatayı söyleyen geri json. Zaman uyumsuz çağrıları yaparken basit ama uygulamanızı iş yöneticisi için adapte ediyorum. aşağıda IO istisnalar için basit bir deneyin yakalamak, ama 401'in 422's vs? Bu nasıl yapılır?Retrofit 2 4xx için eşzamanlı çağrı hatası işleme Hataları

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 
} 

DÜZENLEME

güçlendirme tepki nesnenin kullanılması güçlendirme yanıt nesnesi

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); 
} 

cevap

5

Kontrol yanıt kodu izin verdi ve uygun mesaj göstermek dönen, benim için düğüm noktası oldu.

bu deneyin:

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

size yardımcı olmak için, tepki nesne ne gerekli oldu alkış :) Sevindim – CaptRisky

+0

kullanarak, teşekkür ederiz. –

+0

Aynısını yapıyorum "java.lang.NumberFormatException: Geçersiz çift:" "' hata çünkü call.execute boş değerlere sahip bir json döndürüyor. Call.execute() 'nin gövdesini almak ve başka bir şey yapmadan önce kontrol etmek istiyorum. "Response newPostResponse = call.execute();" gibi bir şey yazdığımda Vücudun doğru olmadığından bir hata alıyorum