1,我试过
// 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更好。但没有说明。
我想制作错误后有效的刷新按钮。
我想知道
答案 0 :(得分:13)
你的Nr。 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"))
请注意,我刚刚移动了一个右括号,以便在每个错误后调用onErrorResumeNext
并且是“内部”Observable的一部分。