En RxJava, cómo reintentar / reanudar en caso de error, en lugar de completar el observable

Lo que quiero lograr es:

  • Supervisar las preferencias de un determinado cambio
  • Cuando se detecta un cambio, iniciar nueva llamada de red utilizando el nuevo valor
  • Transformar resultado
  • Mostrar el resultado en la interfaz de usuario

Sé cuándo sucede el cambio, ahora presumo que necesito llamar al siguiente en un asunto. Esto debería activar una cadena Rx, y al final puedo actualizar la interfaz de usuario.

mViewPeriodSubject = PublishSubject.create(); mAdapterObservable = mViewPeriodSubject .flatMap(period -> MyRetrofitAPI.getService().fetchData(period)) // this might fail .flatMap(Observable::from) .map(MyItem::modifyItem) .toList() .map(obj -> new MyAdapter(obj)); mViewPeriodSubject.onNext("week"); // this one starts the chain mViewPeriodSubject.onNext("year"); // this one does not 

Pero en el caso de la falla de la llamada de la red, los errores observables, y llamando onNext () no da lugar a otra llamada de la red.

Así que mi pregunta es, ¿cómo debo manejar esto? ¿Cómo puedo mantener el Observable intacto para que pueda lanzar otro valor en él? Puedo imaginar, por ejemplo, un simple botón de reintento que sólo quiere ignorar el hecho de que se ha producido un error.

Usted no tiene que tratar el error con su mViewPeriodSubject pero en lugar de otro, tratar con los errores en su retrofit Observable. Este retrofit Observable no se reanudará, pero al menos, no afectará a su "principal" Observable.

 mAdapterObservable = mViewPeriodSubject .flatMap(period -> MyRetrofitAPI.getService().fetchData(period).onErrorResumeNext(e -> Observable.empty()) // this might fail .flatMap(Observable::from) .map(MyItem::modifyItem) .toList() .map(obj -> new MyAdapter(obj)); 
  • Android Pros y Contras: Event Bus y RxJava
  • Inter fragmento de comunicación utilizando rxjava
  • Solo observable con varios suscriptores
  • Observer.onError disparando de manera incoherente
  • RxJava y eventos esporádicos al azar en Android
  • RxJava Break Chain en Condicional
  • Netflix vs ReactiveX RxJava-Biblioteca de Android
  • RxJava Android: cargar datos de caché en los subprocesos adecuados
  • RxJava y datos almacenados en caché
  • Unidad de prueba de la aplicación android con retrofit y rxjava
  • Filtrar lista de objetos en Rxjava
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.