【问题标题】:Resubscribe Observers on onError - RxJava在 onError 上重新订阅观察者 - RxJava
【发布时间】:2017-12-05 22:57:56
【问题描述】:

我订阅了一个观察者如下

public PublishSubject<ChannelModel> publisher = PublishSubject.create();

publisher.subscribe(observer);

Observer<ChannelListModel> observer = new Observer<ChannelListModel>() {
    @Override
    public void onCompleted() {

    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onNext(ChannelListModel model) {
        adapter.setChannels(model.getChannels());
    }
};

当我第一次请求数据并显示相同的数据时,它工作得非常好。但是如果请求失败并且一旦调用 onError ,发布者就会失去它的观察者。我想重新订阅同一个观察者。这样当我重试失败的请求时,我可以将结果发布给观察者。

【问题讨论】:

  • 您不能重试终止的PublishSubject,因为它只会继续发出终端事件。您必须使用其他构造或永远不要终止PublishSubject。看看RxRelay

标签: android rx-java


【解决方案1】:

为了在发生错误时重新订阅 Observable,您应该使用 Retry 运算符。在 RxJava 中,你可以这样做

publisher
  .retry()
  .subscribe(observer);

之后,只要会抛出错误,就应该无限重试订阅。

您还可以像这样指定可能重试的限制:

publisher
  .retry(5)
  .subscribe(observer);

在上面的示例中,订阅者将重试操作 5 次。当尝试5次后错误仍然存​​在时,订阅将失败。

【讨论】:

  • 我尝试使用 retry() 方法,但仍然无法再次订阅 observable。甚至尝试过retryWhen 方法。这对我也不起作用。
猜你喜欢
  • 2018-06-11
  • 1970-01-01
  • 2015-03-12
  • 2017-11-14
  • 2015-06-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多