retrofit - 如何在onError(RxJava)之后保留订户

标签 retrofit rx-java

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"))

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"))

这比一号要好。但没有记载。

我要使刷新按钮在出现错误后起作用。

我想知道
  • 我可以保留或重新订阅订户吗?
  • 这是Rxjava中的正确方法吗?

  • 对不起,我的英语不好。

    最佳答案

    您的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的一部分。

    关于retrofit - 如何在onError(RxJava)之后保留订户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27937944/

    相关文章:

    java - Observable.empty() 导致 java.util.NoSuchElementException : Sequence contains no elements

    java - 与 RxJava 并行处理 IO 密集型任务列表

    java - 如何使用 Java RX Observable 链接异步操作?

    java - 如何返回保证不会抛出 OnErrorNotImplementedException 的 RxJava Observable?

    java - RxJava 发出多个错误

    android - addOnScrollListener 的位置在滚动后加载新数据时重置为顶部

    android - 如何在Android中处理改造响应Kotlin?

    java - 安卓改造失败()

    java - 如何通过改造获取 POJO 和原始响应字符串?

    java - 如何在 RxJava 中让多个订阅者订阅一个分组的 Observable?