Daten mit Flow beobachten
Reagieren Sie reaktiv auf Änderungen in der Datenbank.
Daten mit Flow beobachten ist eine kostenlose Android Academy-Lektion auf CoddyKit. Dies ist Lektion 4 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Android Academy-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Reaktive Datenbank-Lesevorgänge
Statt nur einmal eine Abfrage auszuführen, kann Room einen Flow zurückgeben, der jedes Mal einen neuen Wert ausgibt, wenn sich die zugrunde liegenden Daten ändern. Ihre Benutzeroberfläche wird automatisch aktualisiert.
Einen Flow aus einem DAO zurückgeben
Geben Sie den Rückgabetyp als Flow<...> an. Beachten Sie, dass es sich nicht um eine suspend-Funktion handelt.
@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>Warum hier nicht suspend
Eine suspend-Funktion gibt ein einzelnes Ergebnis zurück und wird anschließend beendet. Ein Flow ist ein fortlaufender Datenstrom. Daher handelt es sich um eine normale Funktion, die das Stream-Objekt zurückgibt; Sie sammeln die Werte im Laufe der Zeit.
Wie Room erneut Werte ausgibt
Room verfolgt, auf welche Tabellen eine Abfrage zugreift. Wenn ein Schreibvorgang eine dieser Tabellen betrifft, führt Room die Abfrage erneut aus und gibt das aktuelle Ergebnis über den Flow aus. Dies geschieht automatisch.
Sammeln in einer Coroutine
Sie sammeln den Flow innerhalb einer Coroutine, typischerweise im ViewModel.
viewModelScope.launch {
dao.observeUsers().collect { users ->
_uiState.value = UiState(users)
}
}Den Flow abbilden
Sie können den Datenstrom vor seiner Bereitstellung mit Operatoren wie map umwandeln.
val names: Flow<List<String>> =
dao.observeUsers().map { list ->
list.map { it.name }
}In einen StateFlow umwandeln
Wandeln Sie einen kalten DAO-Flow mit stateIn für die Benutzeroberfläche in einen heißen StateFlow um.
val uiState = dao.observeUsers()
.map { UiState(it) }
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)In Compose sammeln
Der Bildschirm sammelt diesen Status unter Berücksichtigung des Lebenszyklus, genau wie Sie es zuvor gelernt haben.
@Composable
fun UsersScreen(vm: UserViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
UserList(state.users)
}Die vollständige reaktive Kette
Zusammengefasst:
- Room gibt bei einer Datenänderung einen Wert aus.
- Das ViewModel bildet den Wert mithilfe von
stateInauf den UI-Status ab. - Compose sammelt ihn mit
collectAsStateWithLifecycle.
Schreiben Sie an beliebiger Stelle in die Datenbank, und der Bildschirm aktualisiert sich selbst.
Single Source of Truth
Durch dieses Muster wird die Datenbank zur einzigen Quelle der Wahrheit. Die Benutzeroberfläche enthält niemals veraltete Kopien, sondern gibt immer den tatsächlich gespeicherten Zustand wieder.
Schreibvorgänge lösen Aktualisierungen aus
Jedes Einfügen, Aktualisieren oder Löschen in einer überwachten Tabelle gibt den Flow erneut aus. Daher müssen Sie die Liste nach einer Änderung nicht manuell aktualisieren.
suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automaticallySchnelltest
Testen Sie Ihr Verständnis der Datenbeobachtung mit Flow.
Zusammenfassung
Sie haben gelernt:
- DAO-Methoden, die
Flowzurückgeben, geben bei einer Datenänderung erneut Werte aus. - Es handelt sich um normale Funktionen (keine suspend-Funktionen), die einen Datenstrom zurückgeben.
- Verwenden Sie
stateIn+collectAsStateWithLifecycle, um die Benutzeroberfläche reaktiv zu steuern. - Die Datenbank wird zur einzigen Quelle der Wahrheit.
Häufig gestellte Fragen
Ist die Lektion „Daten mit Flow beobachten“ kostenlos?
Ja — der vollständige Text von „Daten mit Flow beobachten“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Android Academy-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Android Academy-Kurs umfasst insgesamt 4 Lektionen.
Was lerne ich in „Daten mit Flow beobachten“?
Reagieren Sie reaktiv auf Änderungen in der Datenbank. Du übst Android Academy mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.
Brauche ich Erfahrung, um Android Academy zu starten?
Keine Vorkenntnisse erforderlich. Android Academy auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 4 von 4.
Wie lange dauert die Lektion „Daten mit Flow beobachten“?
Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.
Kann ich in dieser Android Academy-Lektion Code schreiben und ausführen?
Ja. Jede Android Academy-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.
Alle Lektionen in diesem Kurs
- Entitäten und DAOs
- Die Room-Datenbankklasse
- Abfragen und Beziehungen
- Daten mit Flow beobachten