2016-04-21 6 views
0

Ich versuche, eine Lösung zum Speichern von Referenzdaten in der Datenbank meiner App zu implementieren.Verwenden Sie RX Java, um Referenzdaten zu laden, aber bei Bedarf blockieren

Die Daten werden anfangs als JSON-Dateien gespeichert, die bei jedem Start von einem Server synchronisiert werden müssen. Ich habe eine lokale Kopie der Dateien in die App gebacken. Bei jedem Start muss ich die freigegebenen Einstellungen für eine Version überprüfen. Und wenn es nicht vorhanden ist, nehme ich an, es ist der erste Start. Also muss ich die Dateien einlesen, schreibe die Dateien in die Datenbank und feuere auf fertig, wenn das erledigt ist. Der erste Bildschirm erwartet, dass sich diese Daten in der Datenbank befinden. Daher wird die Benutzeroberfläche für diesen Bildschirm in diesem Szenario erst angezeigt, wenn der Prozess abgeschlossen ist.

Aber in Zukunft kann der Netzwerkaufruf zum Synchronisieren dieser Dateien asynchron geschehen, so dass ich auf meinem Observable feuern kann, sobald ich sehe, dass die freigegebenen Prefs eine Versionsnummer haben und dann das Update komplett fehlschlagen asynchron

Wie kann ich einen Stream einrichten, um dies darzustellen. Ich denke, der Stream-Typ wahrscheinlich ungültig, und ich werde nur OnCompleted/Fehler als Teilnehmer doesnt Sorge um die Daten feuert, nur das, was der Prozess abgeschlossen ist

Antwort

0

Man könnte so etwas tun:

updateChecker.hasUpdates() 
     .flatMap(hasUpdates -> { 
      if (hasUpdates) { 
       return dataUpdater.update(); 
      } 

      return Observable.just(false); 
     }) 

Unter der Annahme, dass

class UpdateChecker { 
    public Observable<Boolean> hasUpdates() { 
     return Observable.just(true); // Replace by API call 
    } 
} 

class DataUpdater { 
    public Observable<Boolean> update() { 
     // update the database here 
     return Observable.just(true); 
    } 
}