例如,我们有一些方法
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)
}
如果没有连接重复呼叫每4-5秒,直到我们得到响应,最好和最简单的方法使用RX
你可以使用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)
块中进行。
为此,您可以使用它
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)
}