Chr*_*her 6 android rx-java rx-android
我有以下Observable,它将每30秒执行一次带有Retrofit的REST调用:
Subscription subscription = Observable.interval(0, REFRESH_INTERVAL, TimeUnit.SECONDS)
.concatMap(new Func1<Long, Observable<Response>>() {
@Override
public Observable<Response> call(Long time) {
return webservice.callRetrofitServiceWithRx(parameter);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new UpdateSuccessAction(), new UpdateErrorAction());
Run Code Online (Sandbox Code Playgroud)
可能会发生(特别是REST-Call)抛出异常(例如没有互联网连接).
我想要实现的目标:
Observable应该发出/暴露异常,以便我可以在UI上显示错误消息,但它应该继续发出项目(在30秒内重试).
目前研究
如果我没有定义任何特殊行为,Observable会发出异常并停止工作(=在30秒内不重试).
如果我尝试重试操作符,异常将被吞下并且不会被暴露,因此我无法在ui中显示错误.
如果我尝试onErrorReturn运算符,我可以处理异常,但据我所知,不能重试.
解决方法
我目前的解决方法是重新订阅此Observable,但我想知道某人是否有更优雅的解决方案.
我假设doOnError能够满足您的需求(用于记录错误),并结合重试,例如:
Subscription subscription = Observable.interval(0, REFRESH_INTERVAL, TimeUnit.SECONDS)
.concatMap(new Func1<Long, Observable<Response>>() {
@Override
public Observable<Response> call(Long time) {
return webservice.callRetrofitServiceWithRx(parameter);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.doOnError(new UpdateErrorAction())
.retry()
.subscribe(new UpdateSuccessAction());
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1291 次 |
| 最近记录: |