2017-05-23 14 views
1

Android AppにRxJavaアダプターを設定してRetrofitを使用しています。問題は、一部のデバイスでRetrofitがConnectionExceptionを発射し、他の一部のデバイスで発射がUnknownHostExceptionであるという報告がいくつかあります。これは、onErrorResume()メソッドを使用して他のrx.Observablesを接続するのはかなり困難です。さらに悪いことに、両方の例外が共有する唯一の共通の親はかなり一般的なIOExceptionです。これを統一する方法はありますか?RetrofitでUnknownHostExceptionとConnectionExceptionが発生する

私はUnknownHostExceptionケースのみを扱っていました。しかし、今私もこのConnectionExceptionを持っていて、誰が他のどのデバイスで他の例外を知っているのですか?

私はこの2つの例外をNoInternetConnectionExceptionのような一般的なカスタム例外にマップできます。しかし、そこにこの例外の多くがありますか?

UPDATE:だから、基本的にはサムスンS7でUnkownHostExceptionがにConnectionExceptionが発射され、別のデバイスネクサスでは、解雇されている

mNetworkUserRepository.getUserList() 
    .onErrorResule(ObservableUtils.whenExceptionIs(RetrofitError.class), mUserDatabase.getUserList()) //Server side error 
    .onErrorResule(ObservableUtils.whenExceptionIs(UnknownHostException.class), mUserDatabase.getUserList()) //No internet 
    .onErrorResule(ObservableUtils.whenExceptionIs(ConnectionException.class), mUserDatabase.getUserList()) //ANOTHER EXCEPTION FOR THE SAME THING 
    .subscribe(new MySubscriber<List<Users>>() { 
     @Override 
     public void onNext(List<Users> response) { 
      callback.showOnUI(response); 
     } 
    }); 

は、現在、私のインターアクター/ユースケースは、同じようなことをやっています。私はこれが好きではありません、他に「インターネットなし」の例外がいくつありますか?私はRetrofitがUnknownHostExceptionを発しましたが、インターネットに接続せずにhttpリクエストをしようとしただけです。これをどのようにグループ化できますか?私は別のデバイスやもののためにN onResumeErrorsを添付したくない

+0

正確な質問は何ですか?あなたは例外タイプごとに異なるタイプのエラーを区別しようとしていますか?何がジェネリック例外を使用して問題ですか? – yosriz

+0

@yosriz私は自分の答えを更新しました。あなたがより多くの情報を必要とするかどうかを教えてください。 – 4gus71n

+0

ちょうど 'IOException'を捕まえて、あなたが設定しています(' whenExceptionIs'メソッドがクラスの等価性を使用していないと仮定します)。 –

答えて

0

実際に例外が発生しているかどうかは、インターネットがないか、途中で他のネットワークエラーが発生したかどうかを知ることができません。あなたは SocketTimeoutException,UnknowHostExceptionなどのネットワークに関連するExceptionIOExceptionから数十の派生クラスを見ることができます)のようなものが得られるかもしれませんが、ネットワーク操作が失敗する可能性があります。さまざまなソースからの多くのフェーズ、特にモバイルネットワークの場合

本当に「インターネットなし」の動作が必要な場合は、要求の前にcheck itを別々に実行してください。

コールを実行すると、2つの種類の障害が考えられます。途中でネットワークエラーが発生した場合、IOExceptionが発生しました。 (あなたの事件を問わずキャッシュを再試行/使用します)、サーバー(ネットワークエラーなし)からの応答を得て、リクエスト自体に何らかの問題があることを意味する改造エラー(HttpException)があります認証エラー(トークン)、認証など)に対処するとエラーが発生する可能性があります。

+0

OK、上記のように、今すぐIOExceptionからのフックは、私が使用している回避策です。私は、誰かがより良い解決策を提供するかどうかを見極めるのを待つつもりですが、結局私はこれと一緒に行かなければならないかもしれません。 – 4gus71n

関連する問題