RxJava: Wie mache ich eine Abruf-einmal-und-Wiederverwendung Observable?

Bei jedem App-Start habe ich eine Retrofit Observable, die den Benutzernamen des Benutzers von einem Server abruft. Ich möchte diesen Wert für jeden nachfolgenden Abonnenten verwenden, aber es scheint wie jedes Mal, wenn ich abonnieren (), wird der Wert aus dem Netzwerk wieder abgerufen. Da sich der Benutzername während des Lebenszyklus der App nicht wahrscheinlich ändert, schaffe ich das Observable-Objekt nicht neu, sondern nur einmalig.

Wie ich es will, ist:

  • Kopiere das Verzeichnis aus dem Assets in das lokale Verzeichnis
  • Warum hat Android seinen eigenen Weg, um das aktuelle Gebietsschema zu bekommen?
  • Android Studio v1 - Actionbar nicht angezeigt
  • Kann ein Videobild ein Video im internen Speicher abspielen?
  • Android Unit Testing - Best Practice, wenn Code bezieht sich auf Android-Klassen
  • Hintergrund Geolocation reagieren native
  • Erstelle das Observable einmal

    Holen Sie den Benutzernamen einmal ab, speichern Sie diesen Wert im Observable

    Bei abonnieren, benutze diesen gespeicherten Wert, oder wenn es nicht fertig ist, zu holen, warte darauf, dass es geholt wird

    Wie soll ich das machen?

  • Öffnen Sie Google Maps App aus einem Browser mit Standard Start Ort auf Android und iPhone
  • Wie kann man Android-Apps mit Root-Zugriff erstellen?
  • Android-Aktionsleiste mit Suchansicht
  • Best Practices für Audio-Streaming
  • Google Maps Lite Mode verursacht jank in RecyclerView
  • Wo finde ich Android Tab Icons
  • 2 Solutions collect form web for “RxJava: Wie mache ich eine Abruf-einmal-und-Wiederverwendung Observable?”

    Um auf die richtige Antwort von David zu verweisen, hier ist ein Code, der die Verwendung von cache veranschaulicht:

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

    Beachten Sie, dass, obwohl Sie Ergebnisse zweimal erhalten, Sie nur einmal etwas teuer machen.

    Sie können den cache() der den Benutzernamen für den ersten Teilnehmer abruft und den Wert an jeden Teilnehmer dann wieder abgibt (einschließlich des ersten Kurses).

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.