2017-09-21 10 views
0

40xエラーの本体を処理するために、Retrofit Converterに実装する方法はありますか?retrofit2.エラーメッセージを処理するコンバータ

40xコードと空の本文メッセージが返され、EOFExceptionが返されるたびに、サーバーからの応答に問題があります。

私はConverterを実装しましたが、40倍のエラーが発生した場合、それは通過しません。

改修:

public static <T> ObservableTransformer<T, T> parseHttpErrors() { 

    return observable -> observable.onErrorResumeNext(
      (Throwable throwable) -> { 


       if (throwable instanceof HttpException) { 

        int errorCode = ((HttpException) throwable).response().code(); 

        return validateHttpExceptions(throwable, errorCode); 

       } else if (throwable instanceof IOException) { 

        return Observable.error(new NetworkException()); 
       } 
       return Observable.error(throwable); 
      }); 
} 

private static <T> ObservableSource<? extends T> validateHttpExceptions(Throwable throwable, int errorCode) { 

    switch (errorCode) { 
     case 401:// Request Unauthorized 
      return Observable.error(new CredentialsException()); 
     case 408:// Request Timeout 
      return Observable.error(new NetworkException()); 
     default: 
      return Observable.error(new UnknownHttpException(errorCode, throwable.getMessage())); 
    } 
} 

そして、単一のサーバー呼び出し

service.doAction(params) 
     .subscribeOn(Schedulers.io()) 
     .compose(NetworkErrorHandler.parseHttpErrors()) 
     .map(data -> { 

     //map data 
     return data; 
     }); 
+0

RxJavaを使用していますか? –

+0

はい、私は、RxJava 2 –

+0

これはこれを1つ:https://stackoverflow.com/questions/46295237/rxjava-retrofit-parse-api-error-for-user/46302070#46302070 –

答えて

0

は最後に、私はこのエラーを生成されたものが見つかりました:

Gson gson = new GsonBuilder().create();  
Retrofit.Builder builder = new Retrofit.Builder() 
        .addConverterFactory(new NullOnEmptyConverterFactory()) 
        .addConverterFactory(GsonConverterFactory.create(gson)) 
       .addCallAdapterFactory(RxJava2CallAdapterFactory.create()) 
        .baseUrl(url); 
      builder.client(okHttpClientBuilder.build()); 

私はサーバーからのエラーを処理する場所ですコール。それはHttpLoggingInterceptorでした。削除した後、EOFExceptionはなくなりました。

+0

それは面白いです。代わりにStethoを使用しようとしましたか? –

+0

良い点、私はそれを前に使用しましたが、ネットワーク用ではありませんでした。ありがとう! –

関連する問題