Android Academy · Lektion

Observera data med Flow

Reagera på databasändringar reaktivt.

Lektion 4 av 413 steg

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 automatically

Snabbtest

Testa er förståelse av hur data observeras med Flow.

Sammanfattning

Ni har lärt er:

  • DAO-metoder som returnerar Flow skickar ut nya värden när data ändras.
  • De är vanliga funktioner (inte suspend-funktioner) som returnerar en ström.
  • Använd stateIn + collectAsStateWithLifecycle för att driva användargränssnittet reaktivt.
  • Databasen blir den enda källan till sanning.
Gratis att börja

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

  1. Entiteter och DAOs
  2. Room-databasklassen
  3. Frågor och relationer
  4. Observera data med Flow
← Tillbaka till Android Academy