我正在尝试从我的应用程序中的 Web 服务器加载一些数据。并且由于操作的异步性质,无法提前知道完成需要多长时间。为了提醒用户操作“正在进行中”,我使用了加载指示器。
这是使用 kotlin 和 RxJava 2 的想法(我希望它很清楚):
fun loadData(){
showLoader() // show loading indicator
Single.fromCallable {
// http request logic goes here
}.delay(1000, TimeUnit.MILLISECONDS)
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeWith(object : DisposableSingleObserver<String>() {
override fun onSuccess(data: String) {
// do something
hideLoader() // on success, hide indicator
}
override fun onError(e: Throwable) {
displayErrorMessage()
hideLoader() // on error hide indicator
}
})
}
我想显示加载指示器至少 1 秒,所以我使用了
delay()
运算符,但问题是如果操作成功,这会按预期工作,但如果出现错误,指示器将在 1 秒后立即消失。那么有没有办法让
onError()
方法在 1 秒后执行?谢谢 最佳答案
感谢 nacassiano
评论,我终于找到了解决方案:
fun loadData(){
showLoader() // show loading indicator
Single.timer(1000, TimeUnit.MILLISECONDS)
.flatMap{
Single.fromCallable {
// http request logic goes here
}
}.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribeBy( // this is an extension function from rxkotlin
onSuccess = {
// do something
hideLoader() // on success, hide indicator
},
onError = {
displayErrorMessage()
hideLoader() // on error hide indicator
}
)
}
我希望这会帮助某人。
关于android - 如何在 RxJava 2 和 Android 中延迟 onError()?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47596951/