2014-10-02 91 views

回答

2

使用retry方法:

subscription = ViewObservable.clicks(view, false) 
    .map(...) 
    .retry() 
    .subscribe(subscriberA) 

但是,您將不會收到任何例外onError。 要處理與重試(重新訂閱)邏輯使用異常retryWhen

subscription = ViewObservable.clicks(view, false) 
    .map(...) 
    .retryWhen(new Func1<Observable<? extends Notification<?>>, Observable<?>>() { 

     @Override 
     public Observable<?> call(Notification errorNotification) { 
      Throwable throwable = errorNotification.getThrowable(); 
      if (errorNotification.isOnError() && handleError(throwable)) { 
       // return the same observable to resubscribe 
       return Observable.just(errorNotification); 
      } 
      // return unhandled error to handle it in onError and unsubscribe 
      return Observable.error(throwable); 
     } 

     private boolean handleError(Throwable throwable) { 
      // handle your errors 
      // return true if error handled to retry, false otherwise 
      return true; 
     } 
    } 
    .subscribe(subscriberA) 
+0

它的工作原理!這是我需要的答案。不過,我認爲'call'的簽名是錯誤的或過時的,因爲Func1是這樣的:https://github.com/ReactiveX/RxJava/blob/1.x/src/main/java/rx/functions/Func1的.java – user3714348 2014-10-07 07:17:37