Ral*_*ann 11 java android rx-java rx-android retrofit2
我有一个Retrofit电话,想要每30秒召回一次.为此,我使用了Observable.interval(0, 30, TimeUnit.SECONDS)
Observable
.interval(0, 30, TimeUnit.SECONDS)
.flatMap(x -> RestApi.instance().getUsers())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> {
// ...
},
error -> Timber.e(error, "can't load users"));
Run Code Online (Sandbox Code Playgroud)
我的问题:如果api调用失败,onError则调用并且订阅取消订阅并且轮询不再有效:-(
为了捕获api错误,我添加了一个 retryWhen
Observable
.interval(0, 30, TimeUnit.SECONDS)
.flatMap(x -> RestApi.instance().getUsers()
.retryWhen(errors -> errors
.flatMap(error -> Observable.timer(15, TimeUnit.SECONDS))))
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> {
// ...
},
error -> Timber.e(error, "can't load users"));
Run Code Online (Sandbox Code Playgroud)
这会捕获错误但我会在一段时间内收到多个api调用.每30秒我得到一个新的轮询信号,它以新的api请求结束.但是如果api请求失败,它会自行重试.所以我有一个新请求加上所有重试.
我的问题:如何在不取消订阅轮询信号的情况下处理api错误?
raf*_*kob 11
阅读如何正确使用retryWhen和repeatWhen.
http://blog.danlew.net/2016/01/25/rxjavas-repeatwhen-and-retrywhen-explained/
以及如何使用onError运营商:http:
//blog.danlew.net/2015/12/08/error-handling-in-rxjava/
这真的很容易Rx :)我不会给你一个最终的解决方案,只是玩它并尝试理解这里的流程.
| 归档时间: |
|
| 查看次数: |
4677 次 |
| 最近记录: |