如何在 RxJava 2 和 Android 中延迟 onError()?

Ton*_*Joe 5 android delay kotlin rx-java2

我正在尝试从我的应用程序中的网络服务器加载一些数据。并且由于操作的异步性质,无法提前知道需要多长时间才能完成。为了提醒用户操作\xe2\x80\x9cin 正在进行。\xe2\x80\x9d,我正在使用加载指示器。

\n\n

这是使用 kotlin 和 RxJava 2 提出的(我希望它很清楚):

\n\n
fun loadData(){\n\n    showLoader() // show loading indicator\n\n    Single.fromCallable {\n\n        // http request logic goes here\n\n    }.delay(1000, TimeUnit.MILLISECONDS)\n     .subscribeOn(Schedulers.io())\n     .observeOn(AndroidSchedulers.mainThread())\n     .subscribeWith(object : DisposableSingleObserver<String>() {\n\n            override fun onSuccess(data: String) {\n                // do something\n                hideLoader() // on success, hide indicator\n            }\n\n            override fun onError(e: Throwable) {\n                displayErrorMessage()\n                hideLoader() // on error hide indicator\n            }\n\n      })\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

我想显示加载指示器至少 1 秒,所以我使用了操作delay()符,但问题是如果操作成功,它会按预期工作,但如果出现错误,指示器将立即消失,而不是在 1 秒后消失。

\n\n

那么有没有办法让onError()方法在1秒后执行呢?谢谢

\n

don*_*uxx 1

由于您的工作是在后台线程中完成的,因此您可以将其休眠而无需冻结用户界面:

SystemClock.sleep(1000)
Run Code Online (Sandbox Code Playgroud)

hideLoader()只需将其放在通话之前即可