2016-05-10 17 views
1

私のAndroidのアプリがあります。 このため、私はRxAndroidを使い、再試行を予定していました。RxAndroidを使用して再試行でチェーン2コールを呼び出します

私は再試行で1APIコールを行うことができましたが、2つの異なるエラーを表示する必要があります.1つはコール1が利用できないこと、もう1つはコール2が利用できないことです。

チェーン全体で再試行できますが、個々の操作を個別に再試行することをお勧めします。

私のコードは以下の通りです。私はcallApi2の前に "callApi1()"を追加する必要があります。私はリトライで別の観測可能性を持っていると言います。

Observable.create(new Observable.OnSubscribe<String>() { 
       @Override 
       public void call(Subscriber<? super String> subscriber) { 
        try { 
         subscriber.onNext(callApi2()); 
         subscriber.onCompleted(); 
        } catch (Exception e) { 
         subscriber.onError(e); 
        } 
       } 
      }) 
      .retryWhen(new RetryWithDelay(20, 3000)) 
      .timeout(TIME_OUT_SECONDS, TimeUnit.SECONDS) 
      .observeOn(AndroidSchedulers.mainThread()) 
      .subscribeOn(Schedulers.io()) 
      .subscribe(new Subscriber<String>() { 
       @Override 
       public void onNext(String data) { 
         //show something 
       } 
      .... 
      } 

答えて

0

あなたは使用することができObservable.concat operator例えば

Observable<String> obs1 = Observable.create(new Observable.OnSubscribe<String>() { 
      @Override 
      public void call(Subscriber<? super String> subscriber) { 
       try { 
        subscriber.onNext(callApi1()); 
        subscriber.onCompleted(); 
       } catch (Exception e) { 
        subscriber.onError(e); 
       } 
      } 
     }) 
     .timeout(TIME_OUT_SECONDS, TimeUnit.SECONDS) 
     .retryWhen(new RetryWithDelay(20, 3000))    
     .subscribeOn(Schedulers.io()); 

Observable<String> obs2 = Observable.create(new Observable.OnSubscribe<String>() { 
      @Override 
      public void call(Subscriber<? super String> subscriber) { 
       try { 
        subscriber.onNext(callApi2()); 
        subscriber.onCompleted(); 
       } catch (Exception e) { 
        subscriber.onError(e); 
       } 
      } 
     }) 
     .timeout(TIME_OUT_SECONDS, TimeUnit.SECONDS) 
     .retryWhen(new RetryWithDelay(20, 3000))    
     .subscribeOn(Schedulers.io()); 

Observable<String> chained = Observable.concat(obs1,obs2); 
+0

最初の呼び出しが成功した場合にのみ、2番目の呼び出しが必要です。それは連結で起こるのでしょうか? – gdogaru

+0

これは、api呼び出しが失敗したときにどうなるかによって異なります。失敗した場合に例外がスローされた場合は、必要な動作を取得する必要があります。 – JohnWowUs

関連する問題