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?

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

  • Acceso al dominio desde un subproceso incorrecto Excepción mientras se envió una copia usando copyFromRealm
  • Cómo observar los cambios de red en RxAndroid
  • ¿Por qué Rxjava podría causar fugas de memoria?
  • Usando observeOn () el hilo de interfaz de usuario de Android bloquea mi prueba de emulador
  • Combinación de llamadas API con RX Java
  • ¿Dónde se puede encontrar AndroidObservable.fromBroadcast ahora?
  • RxJava No puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ()
  • RxJava + Retrofit -> BaseObservable para llamadas API para manejo centralizado de respuesta
  • RXJava cómo tratar de conseguir después de x tiempo
  • ¿Cuál es la mejor manera de depurar los problemas de RxJava con mensajes no recibidos?
  • Encadenamiento de llamadas de Retrofit con RxJava y devolución del objeto principal
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.