2016-09-02 10 views
0

私はretrofitを使用して、サーバーへのREST API呼び出しの結果としてobservableを返します。非常に通常は、要求タイムアウト例外が発生し、監視可能な状態で実行が停止します。例外は、特定の型の場合、再試行の再サブスクライブする方法タイムアウト例外が発生した場合にobservableを再登録する

myObservable 
    .subscribe(new Subscriber<Something> sub(){ 
     @override 
     void onNext(Something something){ 
      //do something with something 
     } 
        @override 
     void onError(Throwable e){ 
      //retry and resend call to server if e is request timeout exception 
     } 

答えて

2

あなたはretry演算子を使用することができます。

例:例では

myObservable 
    .retry((retryCount, throwable) -> retryCount < 3 && throwable instanceof SocketTimeoutException) 
    .subscribe(new Subscriber<Something> sub(){ 
     @override 
     void onNext(Something something){ 
      //do something with something 
     } 
        @override 
     void onError(Throwable e){ 

     } 

SocketTimeoutException最大3回があった場合、それは再サブスクライブします。

またはラムダなし:

myObservable 
    .retry(new Func2<Integer, Throwable, Boolean>() { 
       @Override 
       public Boolean call(Integer retryCount, Throwable throwable) { 
        return retryCount < 3 && throwable instanceof SocketTimeoutException; 
       } 
      }) 
    .subscribe(new Subscriber<Something> sub(){ 
     @override 
     void onNext(Something something){ 
      //do something with something 
     } 
        @override 
     void onError(Throwable e){ 

     } 
+0

ラムダなしの構文を使用してください。私はプログラミングには新しく、ラムダにはまだ慣れていません –

+0

@MuhammadArsal更新 – LordRaydenMK

+0

これはまさに私が達成したかったものです。たぶんあなたもこの1つで私を助けることができる http://stackoverflow.com/questions/39309910/repeatedly-make-api-call-with-retrofit-and-rxjava –

関連する問題