1
我是RxJava 2的新手,想重試Completable
服務器API調用,直到成功,同時發出重試嘗試的通知,以便我的UI可以顯示重試狀態爲用戶。RxJava 2:重試完成,同時向用戶發出重試通知
事情是這樣的:
public Observable<RetryAttempt> retryServerCall() {
// execute Completable serverCall()
// if an error is thrown, emit new RetryAttempt(++retryCount, error) to subscriber
// retry until serverCall() is successful
}
public Completable serverCall();
public class RetryAttempt {
public RetryAttempt(int retryCount, Throwable cause);
}
我已經嘗試了幾種不同的方法,並遇到了障礙。最接近的是這種方法,創建一個封閉的Observable並顯式調用onNext()/ onComplete()/ onError()。
public Observable<RetryAttempt> retryServerCall() {
final int[] retryCount = {0};
return Observable.create(e ->
serverCall()
.doOnError(throwable -> e.onNext(new RequestHelp.RetryAttempt(++retryCount[0], throwable)))
.retry()
.subscribe(() -> e.onComplete(), throwable -> e.onError(throwable)));
}
也許它有點外圍的事情,但我不得不爲了避免錯誤variable used in lambda should be final or effectively final
使用final
陣列retryCount
。
我知道必須有更好的使用Rx voodoo來完成這個任務。任何指導,非常感謝!
你並不想這樣做,正是這樣,因爲你將失去退訂信號。 –
@Tassos True。我可以使用'subscribeWith'來獲取'Observable'的'Disposable',然後通過'setDisposable'處理,對嗎? – HolySamosa