Tietojen tarkkailu Flowlla
Reagoikaa tietokannan muutoksiin reaktiivisesti.
Tietojen tarkkailu Flowlla on ilmainen Android Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Android Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Android Academy-kurssilla on yhteensä 4 oppituntia.
Reaktiiviset tietokantakyselyt
Yhden kyselyn sijaan Room voi palauttaa Flow-virran, joka tuottaa uuden arvon aina, kun taustalla olevat tiedot muuttuvat. Käyttöliittymä päivittyy automaattisesti.
Flow-virran palauttaminen DAO:sta
Ilmoita palautustyypiksi Flow<...>. Huomaa, että kyseessä ei ole suspend-funktio.
@Query("SELECT * FROM users ORDER BY name")
fun observeUsers(): Flow<List<User>>Miksi suspend ei sovi tähän
suspend-funktio palauttaa yhden tuloksen ja suorittaa toimintansa loppuun. Flow on jatkuva virta, joten se on tavallinen funktio, joka palauttaa virtaobjektin. Virtaa kerätään ajan kuluessa.
Miten Room tietää tuottaa uuden arvon
Room seuraa, mitä tauluja kysely käyttää. Kun jokin kirjoitusoperaatio vaikuttaa näihin tauluihin, Room suorittaa kyselyn uudelleen ja tuottaa tuoreen tuloksen Flow-virtaan. Tämä tapahtuu automaattisesti.
Kerääminen korutiinissa
Flow-virta kerätään korutiinin sisällä, yleensä ViewModelissa.
viewModelScope.launch {
dao.observeUsers().collect { users ->
_uiState.value = UiState(users)
}
}Flow-virran muuntaminen
Voit muuntaa virtaa map-operaattorin kaltaisilla operaattoreilla ennen sen tarjoamista eteenpäin.
val names: Flow<List<String>> =
dao.observeUsers().map { list ->
list.map { it.name }
}Muuntaminen StateFlow-virraksi
Muunna DAO:n kylmä Flow-virta käyttöliittymää varten kuumaksi StateFlow-virraksi käyttämällä stateIn-funktiota.
val uiState = dao.observeUsers()
.map { UiState(it) }
.stateIn(
viewModelScope,
SharingStarted.WhileSubscribed(5000),
UiState()
)Kerääminen Composessa
Näyttö kerää kyseisen tilan elinkaaren huomioivalla tavalla, aivan kuten opit aiemmin.
@Composable
fun UsersScreen(vm: UserViewModel) {
val state by vm.uiState
.collectAsStateWithLifecycle()
UserList(state.users)
}Koko reaktiivinen ketju
Yhdistetään kaikki:
- Room tuottaa uuden arvon tietojen muuttuessa.
- ViewModel muuntaa tiedot käyttöliittymän tilaksi
stateIn-funktion avulla. - Compose kerää tiedot
collectAsStateWithLifecycle-funktiolla.
Kun tietokantaan kirjoitetaan missä tahansa, näyttö päivittyy automaattisesti.
Yksi totuuden lähde
Tämä malli tekee tietokannasta ainoan totuuden lähteen. Käyttöliittymässä ei koskaan säilytetä vanhentuneita kopioita, vaan se näyttää aina todellisuudessa tallennetut tiedot.
Kirjoitukset käynnistävät päivitykset
Jokainen valvotun taulun lisäys-, päivitys- tai poistotoiminto tuottaa Flow-virtaan uuden arvon, joten luetteloa ei tarvitse päivittää manuaalisesti muutoksen jälkeen.
suspend fun addUser(u: User) = dao.insert(u)
// observeUsers() flow re-emits automaticallyPikatesti
Testaa, miten hyvin ymmärrät tietojen seuraamisen Flow-virralla.
Kertaus
Opit seuraavat asiat:
Flow-virtoja palauttavat DAO-metodit tuottavat uuden arvon tietojen muuttuessa.- Ne ovat tavallisia (ei-suspend-)funktioita, jotka palauttavat virran.
- Ohjaa käyttöliittymää reaktiivisesti käyttämällä yhdistelmää
stateIn+collectAsStateWithLifecycle. - Tietokannasta tulee ainoa totuuden lähde.
Opi Kotlin tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 36
- Oppitunnit
- 152
Usein kysytyt kysymykset
Onko oppitunti ”Tietojen tarkkailu Flowlla” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Android Academy-oppimispolun 3 oppituntia, myös oppitunnin “Tietojen tarkkailu Flowlla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Android Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Tietojen tarkkailu Flowlla”?
Reagoikaa tietokannan muutoksiin reaktiivisesti. Harjoittelet Android Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Android Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Android Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Tietojen tarkkailu Flowlla”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Android Academy-oppitunnilla?
Kyllä. Jokainen Android Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Entiteetit ja DAO:t
- Room-tietokantaluokka
- Kyselyt ja suhteet
- Tietojen tarkkailu Flowlla