有没有办法在observable发出任何项目之前执行代码? (用于重试目的)

时间:2017-12-06 06:36:08

标签: android rx-java observable retrofit2

我想通过订阅重试一个observable。这一切都很顺利但现在我每次重试这个观察时我都试图执行一些代码。有什么建议?

observableItem.retry(1).subscribeWith(subscriber);

2 个答案:

答案 0 :(得分:2)

你需要doOnSubscribe运算符在订阅observable时有效(在observable发出任何项目之前)。

...
observableItem
        .doOnSubscribe(subscriber1 -> {
            // Do whatever you want to de before retry.
        })
        .retry(1)
        .subscribeWith(subscriber)
...

注意:我还没有测试过。请测试一下,让我知道。

希望它有所帮助。

答案 1 :(得分:0)

您可以使用retryWhen代替retry

observableItem
  .retryWhen(attempts -> {
     return attemps.flatMap(error -> {
       // TODO: Do what you want here...

       // If you return an Observable with an `onNext` event => retry
       // else if you return an Observable with an error => no retry
       return Observable.just(new Object());
     })
  })
  .subscribeWith(subscriber);