我正在尝试在我的应用程序中从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秒后执行呢?谢谢。
Observable.timer(1, TimeUnit.SECONDS).switchMapSingle { Single.fromCallable { //... } }
吗? - mcassianotimer()
运算符应用于 Single,而无需先将其转换为 Observable? - Toni Joe