Observer data med Flow
Reagér reaktivt på ændringer i databasen.
Observer data med Flow er en gratis Android Academy-lektion på CoddyKit. Dette er lektion 4 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Android Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Android Academy-kurset indeholder 4 lektioner i alt.
Reaktive databaselæsninger
I stedet for kun at forespørge én gang kan Room returnere et Flow, der udsender en ny værdi, hver gang de underliggende data ændres. Brugerfladen opdateres automatisk.
Returnering af et Flow fra en DAO
Deklarér returtypen som Flow<...>. Bemærk, at det ikke er en suspend-funktion.
@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>Hvorfor ikke suspend her
En suspend-funktion returnerer ét resultat og afsluttes. Et Flow er en løbende strøm, så det er en almindelig funktion, der returnerer strømobjektet; du opsamler det over tid.
Sådan ved Room, hvornår der skal udsendes igen
Room holder styr på, hvilke tabeller en forespørgsel berører. Når en skrivning påvirker disse tabeller, kører Room forespørgslen igen og udsender det opdaterede resultat gennem Flowet. Det sker automatisk.
Opsamling i en coroutine
Du opsamler Flowet inde i en coroutine, typisk i ViewModel.
viewModelScope.launch {
dao.observeUsers().collect { users ->
_uiState.value = UiState(users)
}
}Kortlægning af Flowet
Du kan transformere strømmen med operatorer som map, før du eksponerer den.
val names: Flow<List<String>> =
dao.observeUsers().map { list ->
list.map { it.name }
}Konvertering til StateFlow
Konvertér et koldt DAO-Flow til et varmt StateFlow til brugerfladen med stateIn.
val uiState = dao.observeUsers()
.map { UiState(it) }
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Opsamling i Compose
Skærmen opsamler denne tilstand på en livscyklusbevidst måde, præcis som du lærte tidligere.
@Composable
fun UsersScreen(vm: UserViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
UserList(state.users)
}Den fulde reaktive kæde
Hvis vi samler det hele:
- Room udsender ved ændringer i data.
- ViewModel kortlægger til UI-tilstand via
stateIn. - Compose opsamler med
collectAsStateWithLifecycle.
Skriv til databasen hvor som helst, så opdaterer skærmen sig selv.
Én sandhedskilde
Dette mønster gør databasen til den eneste sandhedskilde. Brugerfladen gemmer aldrig forældede kopier, men afspejler altid det, der faktisk er gemt.
Skrivninger udløser opdateringer
Enhver indsættelse, opdatering eller sletning i en overvåget tabel får Flowet til at udsende igen, så du ikke manuelt skal opdatere listen efter en ændring.
suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automaticallyHurtigt tjek
Test din forståelse af observation af data med Flow.
Opsummering
Du har lært:
- DAO-metoder, der returnerer
Flow, udsender igen, når dataene ændres. - De er almindelige funktioner (ikke-suspend), der returnerer en strøm.
- Brug
stateIn+collectAsStateWithLifecycletil reaktivt at styre brugerfladen. - Databasen bliver den eneste sandhedskilde.
Lær Kotlin med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 36
- Lektioner
- 152
Ofte stillede spørgsmål
Er lektionen “Observer data med Flow” gratis?
Ja — alle 3 lektioner i læringssporet Android Academy, inklusive “Observer data med Flow”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Android Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “Observer data med Flow”?
Reagér reaktivt på ændringer i databasen. Du øver dig i Android Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Android Academy?
Der kræves ingen tidligere erfaring. Android Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 4 af 4.
Hvor lang tid tager lektionen “Observer data med Flow”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Android Academy-lektion?
Ja. Alle Android Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.
Alle lektioner i dette kursus
- Entiteter og DAO'er
- Room-databaseklassen
- Queries og relationer
- Observer data med Flow