2017-09-19 3 views
1

Android, Retrofit, RxJava. Bitte schauen Sie sich diesen Beispielanruf an:Retrofit/RxJava - erhalten http Antwortcode

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

Weiß jemand wie man Fehlercode (als Fehlernummer) von throwable bekommt? Ich bin in der Lage, volle Stacktrace oder Nachricht zu bekommen (wie oben gezeigt). Wie erfasse ich den Fehlercode?

Fehlercode aus throwable: enter image description here

+0

Bitte schauen Sie sich meinen Screenshot von debug an. Es gibt "Code" Feld, aber nicht zugänglich – user1209216

+0

Neben den Antworten überprüfen Sie den Kommentar von Jake @ https://github.com/square/retrofit/issues/1218 was bedeutet, dass alle nicht 200 Fehler in 'onNex't behandelt werden können mit 'Observable >' oder 'Observable >' – Raghunandan

Antwort

2

Verwenden Sie einfach Casting ??

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

Dies ist gültige Antwort, danke – user1209216

+0

Sie sind herzlich willkommen;) – paul

+0

Auch müssen Sie überprüfen, ob 'throwable' tatsächlich Instanz von' HttpException' ist. Zum Beispiel, wenn kein Netzwerk verfügbar ist, ist es nicht und App stürzt ab – user1209216

3

Retrofit 2 + Rxjava handling error hier ist Ihre Antwort

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

here für mehr sehen.

+0

Das ist wirklich scheiße. Ich frage mich, warum nur Fehlercode von throwable nicht zugänglich ist, genau wie Fehlermeldung. Danke für den Tipp trotzdem – user1209216

Verwandte Themen