2017-09-19 2 views
1

Android, Retrofit, RxJava. S'il vous plaît regardez cet exemple d'appel:Rénovation/RxJava - Obtenir le code de réponse http

mcityService.signOut(signOutRequest) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(resp -> 
       { 
        busyIndicator.dismiss(); 
        finish(); 
       }, throwable -> 
       { 
        Log.d(tag, throwable.toString()); 
        busyIndicator.dismiss(); 
        Toast.makeText(this,throwable.getMessage(),Toast.LENGTH_LONG).show(); 
        finish(); 
       }); 

Est-ce que quelqu'un sait comment obtenir le code d'erreur (en tant que numéro d'erreur) de throwable? Je suis capable d'obtenir full stacktrace ou message (comme indiqué ci-dessus). Comment capturer le code d'erreur?

Code d'erreur de throwable: enter image description here

+0

Veuillez regarder ma capture d'écran du débogage. Il y a un champ 'code', mais non accessible – user1209216

+0

en dehors des réponses vérifier le commentaire par jake @ https://github.com/square/retrofit/issues/1218 ce qui signifie que toutes les erreurs non 200 peuvent être traitées dans' onNex't avec 'Observable >' ou 'Observable >' – Raghunandan

Répondre

2

Il suffit d'utiliser le moulage ??

mcityService.signOut(signOutRequest) 
       .subscribeOn(Schedulers.io()) 
       .observeOn(AndroidSchedulers.mainThread()) 
       .subscribe(resp -> 
       { 
        busyIndicator.dismiss(); 
        finish(); 
       }, throwable -> 
       { 
        Log.d(tag, throwable.toString()); 
        Log.d(code, ((HttpException)throwable).code()); 

        busyIndicator.dismiss(); 
        Toast.makeText(this,throwable.getMessage(),Toast.LENGTH_LONG).show(); 
        finish(); 
       }); 
+0

Ceci est une réponse valide, merci – user1209216

+0

vous êtes les bienvenus;) – paul

+0

Aussi besoin de vérifier si 'throwable' est réellement instance de' HttpException'. Par exemple, s'il n'y a pas de réseau disponible, ce n'est pas le cas et l'application va planter – user1209216

3

Retrofit 2 + Rxjava handling error voici votre réponse

   @Override 
      public void onError(Throwable e) { 
       if (e instanceof HttpException) { 
        ResponseBody body = ((HttpException) e).response().errorBody(); 

        Converter<ResponseBody, Error> errorConverter = 
         application.getRetrofit().responseBodyConverter(Error.class, new Annotation[0]); 
       // Convert the error body into our Error type. 
        try { 
         Error error = errorConverter.convert(body); 
         Log.i("","ERROR: " + error.message); 
         mLoginView.errorText(error.message); 
        } catch (IOException e1) { 
        e1.printStackTrace(); 
        } 
       } 



      static class Error{ 
      String message; 
      } 

voir here plus.

+0

Cela craint vraiment. Je me demande pourquoi juste le code d'erreur n'est pas accessible de throwable, de la même manière que le message d'erreur. Merci pour le pourboire de toute façon – user1209216