Cómo retrasar onError () en RxJava 2 y Android?

Estoy intentando cargar algunos datos de un server web en mi aplicación. Y debido a la naturaleza asincrónica de la operación, no hay manera de saber de antemano cuánto tardará en completarse. Para alertar al usuario de que la operación está "en progreso", estoy usando un indicador de carga.

Este es el que surgió usando kotlin y RxJava 2 (espero que esté claro):

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 } }) } 

Quiero mostrar el indicador de carga durante al less 1 segundo, así que usé el operador de delay() , pero el problema es que funciona como se esperaba si la operación tuvo éxito, pero en caso de error, el indicador desaparecerá inmediatamente después de 1 segundo .

Entonces, ¿hay alguna manera de que pueda ejecutar el método onError() después de 1 segundo? Gracias

Dado que su trabajo se realiza en un hilo de background, puede simplemente dormir sin congelar la interfaz de usuario:

 SystemClock.sleep(1000) 

simplemente ponga esto antes de la llamada a hideLoader()

Gracias al comentario nacassiano , finalmente logro encontrar una solución:

 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 } ) } 

Espero que esto ayude a alguien.

  • Utilice la unidad de Kotlin (o cualquier otro object) escriba en el layout de Android
  • Asunto de RxJava: escuche el tipo diferente que el que emite
  • RxJava Debounce onNext ()
  • Pruebas unitarias Rxjava observables que tienen un retraso
  • Retrofit 2, Rx 2 y llamadas asincrónicas
  • Completable.andThen resultados en "other is null"
  • Extraño comportamiento de componer y ObservableTransformer en RxJava cuando el genérico pasado se extiende
  • ¿Cómo soluciono el error de inferencia de tipo en un Completable transformado utilizando RxLifecycle.bindToLifecycle ()?
  • ¿Por qué tengo un Log de salida no deseado al fusionar 2 observables en otro Observable, que los almacena temporalmente cada 10 segundos?
  • Espere hasta que dos observables emitan verdadero
  • RxJava 1.x .zip () no funciona en RxJava 2.0