【发布时间】:2015-03-12 08:12:02
【问题描述】:
第一个,我试过了
// used retrofit
public interface ApiService {
@GET(/get_some_data)
Observable<SomeData> getSomeData();
}
// clickStream created by onClick event
// No.1
clickStream
.flatMap(e -> apiService.getSomeData())
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
如果 getSomeData() 成功,这很好。 每次点击我都能得到一些数据。
但如果发生错误,取消订阅。 (所以点击错误后不起作用)
第二,我在下面尝试过。(使用 onErrorResumeNext)但 取消订阅。
(没有调用onError,而是调用了onComplete。所以退订了)
// No.2
clickStream
.flatMap(e -> apiService.getSomeData())
.onErrorResumeNext(throwable -> Observable.empty()) // add this line
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
第三,我在下面尝试了。(重试)
// No.3
clickStream
.flatMap(e -> apiService.getSomeData())
.retry(5) // add this line
.subscribe(
success -> Log.d("tag", "success"),
error -> Log.d("tag", "error"),
() -> Log.d("tag", "complete"))
这比No.1好。但未记录。
我想制作一个在出错后可以使用的刷新按钮。
我想知道
- 我可以保留或重新订阅订阅者吗?
- 这是 Rxjava 中的正确方法吗?
对不起我的英语不好。
【问题讨论】: