Я делаю сетевые запросы, и когда возникает ошибка, например, что Интернет отключен, он должен показывать пользователю ошибку, но повторять в фоновом режиме, чтобы, когда пользователь получает доступ к Интернету, он автоматически выбирал данные.
У меня есть следующий код, который возвращает ошибку после повторной попытки, но мне нужно немедленно вернуть ошибку, но я понятия не имею, как это сделать. Кто-нибудь может помочь? Заранее спасибо.
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 ?: "")
}