例如,我们有一些方法
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}让使用RX的最佳和最简单的方法是,如果每4-5秒不重复调用一次,直到得到响应为止。
发布于 2019-03-22 08:51:29
您可以使用retryWhen。
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.retryWhen { error ->
error.flatMap { Observable.timer(4, TimeUnit.SECONDS) }
}
.observeOn(AndroidSchedulers.mainThread())
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}如果您想要检查错误完全是由没有连接引起的,您可以在error.flatMap{}块(如if(it is NoConnectionException) )中这样做。
发布于 2019-03-22 08:45:59
为了这个目的你可以用这个
source.retryWhen(errors -> errors.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS)))如果收到并出错,retryWhen代码将运行,直到收到onSuccess为止。
在您的代码中,应该是这样的:
private fun getMobileData() {
apiClient.getMobileData()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.retryWhen(e -> e.flatMap(error -> Observable.timer(5, TimeUnit.SECONDS))
.subscribe({ result ->
datasBehavior.onNext(result.datas)
actionsBehavior.onNext(result.actions)
}) { it.message }.addTo(subscriptions)
}https://stackoverflow.com/questions/55295591
复制相似问题