アプリケーションのWebサーバーからデータを読み込もうとしています。また、操作の非同期性のため、完了までにどれくらい時間がかかるかを事前に知る方法はありません。操作が進行中であることをユーザーに警告するために、私はローディングインジケーターを使用しています。RxJava 2とAndroidでonError()を遅らせる方法は?
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
}
})
}
が、私はそう、私はdelay()
演算子を使用し、少なくとも1秒のためのローディングインジケーターを表示したいのですが、:
これは、aがkotlinとRxJava 2を使用して思い付いたです(私はそれを明確に願っています)この問題は、操作が成功した場合には期待どおりに機能しますが、エラーの場合は1秒後にすぐに消えます。
onError()
メソッドを1秒後に実行できる方法はありますか?おかげ
Observable.timer(1、TimeUnit.SECONDS).switchMapSingle {Single.fromCallable {// ...}} 'と一緒に行けませんか? – mcassiano
mcassinoこれは完全に動作しますありがとうございます。最初にObservableに変換するのではなく、 'timer()'演算子をSingleに直接適用することはできませんか? –
できます:)私はSingle.timer()とmap()もそれを行うための有効な方法だと思います。 – mcassiano