Wie erstelle ich ein Observable in Android?

8

Ich möchte einen einfachen In-Memory-Cache erstellen, um Observables auszuprobieren. Ich bin jedoch steckengeblieben, weil ich nicht verstehe, wie man ein Observable erstellt. Dies ist der Code, den ich bisher bekommen habe:

%Vor%

In der Methode getMovies() möchte ich ein Observable erstellen und mein lokales Feld movieWrapper an den Abonnenten zurückgeben. Wie kann ich das machen? Ich habe versucht mit new Observable.just(movieWrapper) , aber es führt zu einer Null-Ausnahme.

    
Deichmann Dacke Andersson 07.03.2016, 16:51
quelle

2 Antworten

6

Schauen Sie sich dieses Tutorial an wie es genau das tut, wonach Sie suchen. Im Grunde verwenden Sie defer() , um sicherzustellen, dass Sie immer die neueste Version Ihres zwischengespeicherten Objekts erhalten:

%Vor%

defer() stellt sicher, dass Sie das Objekt bei subscription für die Observable not on -Erstellung erhalten.

Beachten Sie jedoch, dass, laut dem Autor des Beitrags:

  

Der einzige Nachteil von defer () ist, dass es jeweils ein neues Observable erstellt   Zeit bekommen Sie einen Abonnenten. create () kann für jedes die gleiche Funktion verwenden   Abonnent, so ist es effizienter. Wie immer, messen Sie die Leistung und   optimieren Sie bei Bedarf.

    
Ricardo Lage 07.03.2016, 17:01
quelle
3

Wie bereits gesagt, hat die akzeptierte Antwort einen Nachteil

  

es erstellt jedes Mal ein neues Observable, wenn Sie einen Abonnenten erhalten

Aber es ist nicht der einzige.

  • Der Verbraucher erhält keinen Wert, wenn er getMovies().subscribe(...) aufruft, bevor setCache(...) aufgerufen wird.
  • Der Kunde sollte sich neu anmelden, wenn er Updates erhalten möchte (sagen wir, setCache() kann mehrmals aufgerufen werden.

Natürlich können alle in Ihrem Szenario irrelevant sein. Ich möchte dir nur einen anderen Weg zeigen (ich bin mir sicher, dass es noch viele mehr gibt). Sie können BehaviorSubject verwenden, um alle diese Nachteile zu beseitigen.

%Vor%

Sehen Sie sich das Marble-Diagramm BehaviorSubject an .

    
MyDogTom 07.03.2016 20:38
quelle

Tags und Links