2017-09-19 8 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(); 
       }); 

誰かがスローテーブルからエラー番号(エラー番号)を取得する方法を知っていますか?私は完全なstacktraceまたはメッセージを得ることができます(上記のように)。エラーコードをキャプチャするには?スロー可能オブジェクトから

エラーコード:ここ enter image description here

+0

私のスクリーンショットをデバッグから見てください。 'code'フィールドはありますが、 – user1209216

+0

の形式ではないので、答えはjake @ 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

でこれは本当にうんざりです。私はなぜエラーコードがエラーメッセージと同じ方法でスロー可能でないのか不思議です。とにかくチップありがとう – user1209216

関連する問題