Observera data med Flow
Reagera på databasändringar reaktivt.
Observera data med Flow är en gratis lektion i Android Academy på CoddyKit. Detta är lektion 4 av 4. Du kan läsa vilka 3 lektioner som helst i den här lärvägen kostnadsfritt i sin helhet – därefter låser CoddyKit PRO upp alla lektioner, plus praktisk övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Den ingår i lärvägen för Android Academy, och Era framsteg synkroniseras mellan webben och CoddyKit-appen. Kursen i Android Academy innehåller totalt 4 lektioner.
Reaktiva databasläsningar
I stället för att fråga databasen en gång kan Room returnera ett Flow som skickar ut ett nytt värde varje gång underliggande data ändras. Ert användargränssnitt uppdateras automatiskt.
Returnera ett Flow från en DAO
Ange returtypen som Flow<...>. Observera att det inte är en suspend-funktion.
@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>Varför inte suspend här
En suspend-funktion returnerar ett enda resultat och avslutas. Ett Flow är en pågående ström, så det är en vanlig funktion som returnerar själva strömobjektet; ni samlar in värden från det över tid.
Så vet Room när värden ska skickas igen
Room håller reda på vilka tabeller en fråga berör. När en skrivning påverkar någon av dessa tabeller kör Room frågan igen och skickar det uppdaterade resultatet genom Flow. Detta sker automatiskt.
Samla in i en korutin
Samla in flödet i en korutin, vanligtvis i ViewModel.
viewModelScope.launch {
dao.observeUsers().collect { users ->
_uiState.value = UiState(users)
}
}Mappa Flow
Ni kan omvandla strömmen med operatorer som map innan ni exponerar den.
val names: Flow<List<String>> =
dao.observeUsers().map { list ->
list.map { it.name }
}Gör om det till StateFlow
Konvertera ett kallt DAO-flöde till ett hett StateFlow för användargränssnittet med stateIn.
val uiState = dao.observeUsers()
.map { UiState(it) }
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Samla in i Compose
Skärmen samlar in detta tillstånd på ett livscykelmedvetet sätt, precis som ni lärde er tidigare.
@Composable
fun UsersScreen(vm: UserViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
UserList(state.users)
}Hela reaktiva kedjan
Om vi sätter ihop det:
- Room skickar ut värden när data ändras.
- ViewModel mappar tillståndet för användargränssnittet via
stateIn. - Compose samlar in med
collectAsStateWithLifecycle.
Skriv till databasen var som helst, så uppdateras skärmen automatiskt.
En enda källa till sanning
Det här mönstret gör databasen till den enda källan till sanning. Användargränssnittet innehåller aldrig gamla kopior utan återspeglar alltid det som faktiskt är lagrat.
Skrivningar utlöser uppdateringar
Varje infogning, uppdatering eller borttagning i en övervakad tabell skickar ut flödet igen, så ni behöver inte uppdatera listan manuellt efter en ändring.
suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automaticallySnabbtest
Testa er förståelse av hur data observeras med Flow.
Sammanfattning
Ni har lärt er:
- DAO-metoder som returnerar
Flowskickar ut nya värden när data ändras. - De är vanliga funktioner (inte suspend-funktioner) som returnerar en ström.
- Använd
stateIn+collectAsStateWithLifecycleför att driva användargränssnittet reaktivt. - Databasen blir den enda källan till sanning.
Lär dig Kotlin med en AI-lärare – gratis
Skriv och kör riktig kod i webbläsaren, få omedelbar hjälp av en AI-lärare dygnet runt och fortsätt där du slutade – på webben eller i appen.
- Kurser
- 36
- Lektioner
- 152
Vanliga frågor
Är lektionen ”Observera data med Flow” gratis?
Ja – du kan läsa vilka 3 lektioner som helst i lärvägen Android Academy, inklusive ”Observera data med Flow”, kostnadsfritt i sin helhet här på webben. Därefter låser CoddyKit PRO upp alla lektioner, plus interaktiv övning med en inbyggd kodredigerare och en AI-lärare dygnet runt. Kursen i Android Academy innehåller totalt 4 lektioner.
Vad lär jag mig i ”Observera data med Flow”?
Reagera på databasändringar reaktivt. Ni övar på Android Academy med praktisk kod som körs direkt i webbläsaren, medan en AI-handledare som är tillgänglig dygnet runt svarar på Era frågor under lektionen.
Behöver jag någon erfarenhet för att börja lära mig Android Academy?
Du behöver inga förkunskaper. Utbildningen i Android Academy på CoddyKit är upplagd för allt från nybörjare till avancerade elever, så att du kan börja här eller från början och gå fram i din egen takt. Detta är lektion 4 av 4.
Hur lång tid tar lektionen ”Observera data med Flow”?
De flesta CoddyKit-lektioner tar cirka 5–10 minuter. Varje lektion är kort och interaktiv, så att du gör stadiga framsteg och kan fortsätta precis där du slutade – på webben eller i appen.
Kan jag skriva och köra kod i den här Android Academy-lektionen?
Ja. Varje Android Academy-lektion innehåller en inbyggd kodredigerare, så att du kan skriva och köra riktig kod direkt i webbläsaren och få omedelbar AI-feedback – utan lokal installation.
Alla lektioner i den här kursen
- Entiteter och DAOs
- Room-databasklassen
- Frågor och relationer
- Observera data med Flow