Android Academy · Oppitunti

Tietojen tarkkailu Flowlla

Reagoikaa tietokannan muutoksiin reaktiivisesti.

Oppitunti 4/413 vaihetta

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 automatically

Pikatesti

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.
Aloita maksutta

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

  1. Entiteetit ja DAO:t
  2. Room-tietokantaluokka
  3. Kyselyt ja suhteet
  4. Tietojen tarkkailu Flowlla
← Takaisin: Android Academy