Android Academy · Lezione

Osservare i dati con Flow

Reagisca in modo reattivo alle modifiche del database.

Lezione 4 di 413 passaggi

Osservare i dati con Flow è una lezione Android Academy gratuita su CoddyKit. Questa è la lezione 4 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Android Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Android Academy include 4 lezioni in totale.

Letture reattive del database

Anziché eseguire una query una sola volta, Room può restituire un Flow che emette un nuovo valore ogni volta che cambiano i dati sottostanti. L'interfaccia utente si aggiorna automaticamente.

Restituire un Flow da un DAO

Dichiari il tipo restituito come Flow<...>. Noti che non è una funzione suspend.

@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>

Perché qui non usare suspend

Una funzione suspend restituisce un singolo risultato e termina. Un Flow è un flusso continuo, quindi è una funzione normale che restituisce l'oggetto flusso; lo raccoglie nel tempo.

Come fa Room a sapere quando emettere di nuovo

Room tiene traccia delle tabelle coinvolte da una query. Quando una scrittura modifica una di queste tabelle, Room esegue nuovamente la query ed emette il risultato aggiornato nel Flow. Tutto ciò avviene automaticamente.

Raccogliere in una coroutine

Raccoglie il flow all'interno di una coroutine, in genere nel ViewModel.

viewModelScope.launch {
    dao.observeUsers().collect { users ->
        _uiState.value = UiState(users)
    }
}

Mappare il Flow

Può trasformare il flusso con operatori come map prima di esporlo.

val names: Flow<List<String>> =
    dao.observeUsers().map { list ->
        list.map { it.name }
    }

Trasformarlo in StateFlow

Converta il flow freddo del DAO in uno StateFlow caldo per l'interfaccia utente con stateIn.

val uiState = dao.observeUsers()
    .map { UiState(it) }
    .stateIn(
        viewModelScope,
        SharingStarted.WhileSubscribed(5000),
        UiState()
    )

Raccogliere in Compose

La schermata raccoglie quello stato tenendo conto del ciclo di vita, esattamente come ha imparato in precedenza.

@Composable
fun UsersScreen(vm: UserViewModel) {
    val state by vm.uiState
        .collectAsStateWithLifecycle()
    UserList(state.users)
}

La catena reattiva completa

Riunendo tutti gli elementi:

  • Room emette quando cambiano i dati.
  • ViewModel mappa i dati nello stato dell'interfaccia utente tramite stateIn.
  • Compose raccoglie con collectAsStateWithLifecycle.

Scriva nel DB da qualsiasi punto e la schermata si aggiornerà da sola.

Un'unica fonte di verità

Questo modello fa del database l'unica fonte di verità. L'interfaccia utente non conserva mai copie obsolete: riflette sempre ciò che è effettivamente memorizzato.

Le scritture attivano gli aggiornamenti

Qualsiasi inserimento, aggiornamento o eliminazione in una tabella osservata fa emettere nuovamente il flow, quindi non deve aggiornare manualmente l'elenco dopo una modifica.

suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automatically

Verifica rapida

Verifichi la Sua comprensione dell'osservazione dei dati con Flow.

Riepilogo

Ha imparato a:

  • Usare i metodi DAO che restituiscono Flow, i quali emettono nuovamente quando cambiano i dati.
  • Considerarli funzioni normali (non suspend) che restituiscono un flusso.
  • Usare stateIn + collectAsStateWithLifecycle per pilotare l'interfaccia utente in modo reattivo.
  • Fare del database l'unica fonte di verità.
Gratis per iniziare

Impara Kotlin con un tutor IA — gratis

Scrivi ed esegui vero codice nel tuo browser, ricevi aiuto istantaneo da un tutor IA disponibile 24/7, e riprendi da dove hai lasciato sul web o nell'app.

Corsi
36
Lezioni
152

Domande Frequenti

La lezione «Osservare i dati con Flow» è gratuita?

Sì — il testo completo di «Osservare i dati con Flow» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Android Academy, passa a CoddyKit PRO. Il corso Android Academy include 4 lezioni in totale.

Cosa imparerò in «Osservare i dati con Flow»?

Reagisca in modo reattivo alle modifiche del database. Eserciti Android Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Android Academy?

Non è richiesta alcuna esperienza precedente. Android Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 4 di 4.

Quanto tempo richiede la lezione «Osservare i dati con Flow»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Android Academy?

Sì. Ogni lezione Android Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Entità e DAO
  2. La classe del database Room
  3. Query e relazioni
  4. Osservare i dati con Flow
← Torna a Android Academy