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"))
Run Code Online (Sandbox Code Playgroud)
如果getSomeData()成功,这很好.我每次点击都可以得到一些数据.
但如果发生错误,取消订阅.(因此错误后点击不起作用)
2,我在下面尝试过.(使用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"))
Run Code Online (Sandbox Code Playgroud)
3,我在下面试过.(重试)
// 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"))
Run Code Online (Sandbox Code Playgroud)
这比No.1更好.但未被描述.
我想制作错误后工作的刷新按钮.
我想知道
抱歉我的英语不好.
dav*_*ola 14
你的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"))
Run Code Online (Sandbox Code Playgroud)
请注意,我刚刚移动了一个右括号,以便onErrorResumeNext
在每个错误之后调用它,并且是"内部"Observable的一部分.
归档时间: |
|
查看次数: |
3256 次 |
最近记录: |