RxJava: ¿Cómo puedo hacer una observación de búsqueda-una vez-y-reutilización?

En cada lanzamiento de la aplicación, tengo un Retrofit Observable que recupera el nombre de usuario del usuario desde un servidor. Quiero utilizar este valor para cada suscriptor subsiguiente, pero parece que cada vez que llamo subscribe (), el valor se vuelve a extraer de la red. Dado que el nombre de usuario no es probable que cambie durante el ciclo de vida de la aplicación, no estoy recreando el objeto Observable, solo instanciando una vez.

Cómo quiero que funcione es:

Crear el observable una vez

Obtener el nombre de usuario una vez, guardar ese valor en el Observable

Al suscribirse, utilice ese valor guardado, o si no se ha completado la búsqueda, espere a que se obtenga

¿Cómo debo hacer esto?

2 Solutions collect form web for “RxJava: ¿Cómo puedo hacer una observación de búsqueda-una vez-y-reutilización?”

Para elaborar la respuesta correcta de David, he aquí un código que ilustra el uso de cache :

 public class Caching { public static void main(String[] args) throws IOException { Observable<String> observable = doSomethingExpensive().cache(); observable.subscribe(System.out::println); observable.subscribe(System.out::println); } private static Observable<String> doSomethingExpensive(){ return Observable.create(subscriber -> { System.out.println("Doing something expensive"); subscriber.onNext("A result"); subscriber.onCompleted(); }); } } 

Tenga en cuenta que, a pesar de obtener dos resultados dos veces, sólo hacer algo caro una vez.

Puede utilizar cache() que recuperará el nombre de usuario para el primer suscriptor y sólo volverá a reproducir el valor a cualquier suscriptores y luego en (incluido el primero, por supuesto).

  • En RxJava, cómo reintentar / reanudar en caso de error, en lugar de completar el observable
  • Cómo observar los cambios de red en RxAndroid
  • ¿Cómo obtener el último valor de BehaviorSubject?
  • RxJava y datos almacenados en caché
  • RxJava Observable.cache invalidate
  • ¿Dónde se puede encontrar AndroidObservable.fromBroadcast ahora?
  • No vuelva a ejecutar la llamada de Retrofit si todavía está en curso con RxJava 2
  • Realm + Retrofit + Rxjava
  • Evento de RxJava de incendio sólo cambia cuando Fragmento es visible en ViewPager
  • Habilitación del botón cuando EditText tiene texto (RxAndroid)
  • ¿Cómo administrar un DialogFragment con RxJava?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.