Ich habe eine Android-Anwendung mit einer Datenschicht durch eine Datenbank Ressource mit Raum zugänglich dargestellt. Dies sind zwei Methoden meiner DAOAndroid RxJava2 benachrichtigen neue Daten in eine Datenbank einfügen
@Query("SELECT * FROM user")
Flowable<List<UserEntity>> getUsers();
@Insert(onConflict = OnConflictStrategy.REPLACE)
void saveUser(final UserEntity user);
Meine Aktivität onCreate
Methode zeigt die Liste der Benutzer und lassen eine neue mit einem Formular einzufügen. Es zeichnen die beobachtbare wie folgt aus:
mUserViewModel.getUsers()
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe (this::populateList)
Vereinfachte die Ansicht Modellimplementierung
public Flowable<List<User>> getUsers(){
return repository.getUsers();
}
ist Jetzt würde ich gerne wissen, was der beste Weg ist mein beobachtbar zu benachrichtigen, wenn ich erfolgreich einen neuen Benutzer einfügen in die Datenbank um die Benutzerliste zu aktualisieren?
Ist es korrekt, eine BehaviorProcessor<any value>
zu verwenden, einen Wert jedes Mal ausgeben, wenn ich einen neuen Benutzer erfolgreich einfügen und den BehaviorProcessor als beobachtbar und zum Beispiel innerhalb der SwitchMap-Methode beobachten?
Dies ist ein Beispiel mit einem Filter:
BehaviorProcessor<String> mFilter = BehaviorProcessor.createDefault(DEFAULT_VALUE);
public Flowable<List<User>> getUsers(){
return repository.getUsers()
.switchMap(users -> mFilter.map(this::filterList));
}
public void saveUser(User user){
repository.saveUser(user);
filter.emit(DEFAULT_VALUE);
}
Auf diese Weise jedes Mal, wenn ich einen neuen Wert emittieren die beobachtbar ist neu geladen und die Teilnehmer die neuen Daten.
Verwendung: public Complect saveuser (Benutzerbenutzer). Es ist einfacher –
der Flowable zurückgegeben von 'GetUsers 'wird eine neue' List' mit allen Daten ausgeben, wenn die Daten in der Tabelle ändert (ein Benutzer hinzugefügt, gelöscht oder geändert) – LordRaydenMK
@LordRaydenMK Dies, weil die Raum-Implementation tut es selbst? Was mache ich, wenn ich keinen Raum nutze und manuell ein Flowable von einem Iterable erzeuge? – lukaspp