【发布时间】:2018-05-15 18:27:38
【问题描述】:
我正在尝试从我的应用程序中的 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 { //... } }一起去吗? -
mcassino 谢谢你这完美的作品。难道不能直接在 Single 上应用
timer()操作符,而不是先将其转换为 Observable 吗? -
你可以 :) 我认为 Single.timer() 然后 map() 也是一种有效的方法。
标签: android kotlin delay rx-java2