2017-09-19 217 views
1

Android,Retrofit,RxJava。請看這個例子調用:Retrofit/RxJava - 獲取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(); 
       }); 

有沒有人知道如何從throwable中獲取錯誤代碼(如錯誤號)?我能夠獲得完整的堆棧跟蹤或消息(如上所示)。如何捕獲錯誤代碼?從拋出

錯誤代碼:這裏 enter image description here

+0

請從debug中查看我的屏幕截圖。有'code'字段,但不可訪問 – user1209216

+0

除了答案檢查評論由傑克@ https://github.com/square/retrofit/issues/1218這意味着任何非200錯誤可以在'onNex't處理與'Observable <響應>或'Observable >' – Raghunandan

回答

2

只要使用鑄造??

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

這是有效的答案,謝謝 – user1209216

+0

歡迎;) – paul

+0

還需要檢查'throwable'實際上是'HttpException'的實例。例如,如果沒有可用的網絡,它不會和應用程序崩潰 – user1209216

3

Retrofit 2 + Rxjava handling error是你的答案

   @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更多。

+0

這真的很糟糕。我想知道爲什麼只是錯誤代碼不能從throwable訪問,就像錯誤消息一樣。無論如何感謝提示 – user1209216

相關問題