2016-04-23 9 views
1

Ich bin neu bei RxJava und versuche, die Realm Observable-Funktion zu verwenden.Realm asObservable() gibt nur neue Objekte aus

Wenn dieses

realm.where(Intake.class) 
      .findAllSorted("time", Sort.DESCENDING) 
      .asObservable() 

tun bekomme ich die vollständige Liste der Artikel, aber wenn soemthing Änderungen (zB Artikel hinzugefügt), habe ich die vollständige Liste erhalten wieder.

Was ist der RxJava-Weg, nur die neuen Artikel zu bekommen?

Vielen Dank im Voraus

Antwort

0

Sie beobachten gerade die Abfrageergebnisse. Da Ihre Abfrage mehrere Elemente enthalten kann (findAllSorted()), beobachten Sie immer die RealmResults, die bei einer Änderung alle sortierten Elemente ausgibt (siehe docs).

Sie können so etwas tun:

realm.where(Intake.class) 
    .findAllSorted("time", Sort.DESCENDING) 
    .asObservable() 
    .flatMapIterable(results -> results) 
    .distinct(); 

Das macht 2 weitere Dinge:

  • wandeln Sie Ihre RealmResults zu singulären Intake Instanzen
  • nur unterschiedliche Elemente (machen passieren sicher lassen Sie Ihre Intake implementiert equals() korrekt)

Dies verursacht jedoch eine zusätzliche CPU-Belastung, da jedes Mal, wenn die Abfrage eine neue RealmResult weiterleitet, die Verarbeitung durchgeführt wird, um die einzelnen Elemente herauszufiltern.

Im obigen Beispiel wird die Sortierung für den ersten Satz der ausgegebenen Intake Objekte funktionieren. Spätere emittierte Objekte können jedoch außer Betrieb betrachtet werden, da sie neu sind und nach den ersten Ergebnissen emittiert werden.

+0

und wie würden Sie mit gelöschten Elementen umgehen? – Cheborra

+0

Ich bin nicht vertraut mit Realm, aber meine Vermutung ist, filter() auf der Aufnahme Observable, um gelöschte herauszufiltern. –

Verwandte Themen