Osservare i dati con Flow
Reagisca in modo reattivo alle modifiche del database.
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 automaticallyVerifica 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+collectAsStateWithLifecycleper pilotare l'interfaccia utente in modo reattivo. - Fare del database l'unica fonte di verità.
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
- Entità e DAO
- La classe del database Room
- Query e relazioni
- Osservare i dati con Flow