Mah*_*azi 7 rx-java retrofit rx-android
在这种情况下,我有API调用usign Retrofit可能因网络错误而失败.如果失败,我们将使用重试按钮显示错误消息.当用户按下重试按钮时,我们需要再次重试最新的Observable.
可能的解决方案:
重试:在订阅observable之前应该使用重试,如果发生错误,它将立即重新订阅,这是我不想要的,我只有在用户按下重试按钮时才需要重新订阅.
RetryWhen:它将继续尝试,直到您发出Observable错误然后它将停止.同样的问题,除非使用决定,否则我不需要启动重试过程.
重新订阅相同的Observable:这个解决方案将开始发出Observable项,问题是我们正在使用缓存操作符,所以如果一个Observable失败,我们得到缓存的失败项,当我们再次订阅时,我们得到了同样的错误.
还有其他解决方案吗?
您可以使用retryWhen,哪个参数 - Func1 - 返回一个Observable,它指示何时应该重试.例如 :
PublishSubject<Object> retryButtonClicked = PublishSubject.create();
Observable
.error(new RuntimeException())
.doOnError(throwable -> System.out.println("error"))
.retryWhen(observable -> observable.zipWith(retryButtonClicked, (o, o2) -> o))
.subscribe();
retryButtonClicked.onNext(new Object());
Run Code Online (Sandbox Code Playgroud)
每次retryButtonClicked emmits事件时,都会重试Observable
这里也是一个例子 - https://gist.github.com/benjchristensen/3363d420607f03307dd0
| 归档时间: |
|
| 查看次数: |
1738 次 |
| 最近记录: |