gpt4 book ai didi

android - 如何返回错误值并使用计时器重试

转载 作者:行者123 更新时间:2023-11-29 02:18:10 27 4
gpt4 key购买 nike

我正在发出网络请求,当出现互联网离线等错误时,它应该向用户显示错误,但会在后台重试,这样当用户访问互联网时它会自动获取数据。

我有以下代码,重试后返回错误,但我需要立即返回错误,但不知道如何去做。有人可以帮忙吗?提前致谢。

apiService.getForecastWeatherByLocation(latitude, longitude)
.subscribeOn(Schedulers.io()).observeOn(Schedulers.io()).map { response ->
if (response.isSuccessful) {
Resource.success(
transformForecastResponseToForecast(response.body())
)
} else {
Resource.error(response.code(), response.message())
}
}
.startWith(Resource.loading(null))
.retryWhen { errors: Flowable<Throwable> ->
errors.zipWith(
Flowable.range(1, 3 + 1),
BiFunction<Throwable, Int, Int> { error: Throwable, retryCount: Int ->
if (retryCount > 3) {
throw error
} else {
retryCount
}
}
).flatMap { retryCount: Int ->
Flowable.timer(
2.toDouble().pow(retryCount.toDouble()).toLong(),
TimeUnit.SECONDS
)
}
}.onErrorReturn {
Resource.error(AppConstants.UNKNOWN_ERROR, it.localizedMessage ?: "")
}

最佳答案

我认为在单流中实现你想要的是不可行的,因为一旦调用 onError() 流就会关闭。解决方法如何?

val retryObservable = apiService.getForecastWeatherByLocation(...)
.map { ... }
.subscribeOn(...)
.observeOn(...)
.retryWhen(...)

apiService.getForecastWeatherByLocation(...)
.map { ... }
.subscribeOn(...)
.observeOn(...)
.startWith(...)
.onErrorReturn {
retryObservable.subscribe()
Resource.error(...)
}
.subscribe()

关于android - 如何返回错误值并使用计时器重试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58757736/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com