在Android中使用rxjava2时使用retry重新连接

时间:2018-12-19 10:35:16

标签: rx-java2

我有以下RxJava一次性应用程序,可在其中收听服务器的实时更新

someNetworkBaseFlowable
    .observeOn(schedulerProvider.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .subscribe({
        // handle success
    }, {
        // handle failure
    })

当网络出现故障时,此订阅将失败,即使网络恢复,我也会失去与服务器的连接。

我一直在尝试retryWhen以便按照以下说明重新订阅服务器

someNetworkBaseFlowable
    .observeOn(schedulerProvider.io())
    .subscribeOn(AndroidSchedulers.mainThread())
    .retryWhen { error ->
        error.flatMap {
            Flowable.timer(5, TimeUnit.SECONDS)
        }
    }
    .subscribe({
        // handle succes
    }, {
        // handle failure
    })

虽然我会尝试ping或重新连接到服务器并每5秒重新订阅一次,但事实并非如此!

我已经苦苦挣扎了一段时间,对此问题的任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您可以对代码进行如下修改:

  someNetworkBaseFlowable
      .observeOn(schedulerProvider.io())
      .subscribeOn(AndroidSchedulers.mainThread())
      .retryWhen { errorFlowable : Flowable<Throwable> ->

          errorFlowable
          .ofType(YourExceptionType::class.java) // for Kotlin
          // .ofType(YourExceptionType.class) // for Java

          .switchMap{ // to avoid duplicates
              Flowable.timer(5L, TimeUnit.SECONDS)
          }
      }
      .subscribe(
      {
          // handle succes
      }, 
      {
          // handle failure
      })

如果捕获到YourExceptionType,是否立即重试?