Android Academy · Lektion

Observer data med Flow

Reagér reaktivt på ændringer i databasen.

Lektion 4 af 413 trin

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 automatically

Hurtigt 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 + collectAsStateWithLifecycle til reaktivt at styre brugerfladen.
  • Databasen bliver den eneste sandhedskilde.
Gratis at komme i gang

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

  1. Entiteter og DAO'er
  2. Room-databaseklassen
  3. Queries og relationer
  4. Observer data med Flow
← Tilbage til Android Academy