Tema
/
Mobiliosios programėlės KOTLIN
Pamoka 7 / 14 Room kaip talpykla ~50 min
📖 Teorija

Kodėl talpykla: vienas tiesos šaltinis

Iki šiol meniu ateidavo tik iš tinklo (5 pamoka): atidarai programėlę — matai Loading, lauki atsakymo, ir tik tada picas. Nėra interneto — matai Error, tuščią ekraną. Bet meniu keičiasi retai. Kam kas kartą laukti tinklo?

Pica meniui pridedam talpyklą (cache), kad jis atsidarytų akimirksniu ir veiktų net be ryšio. Idėja — vienas tiesos šaltinis (single source of truth): ekranas visada rodo vietinę talpyklą, o tinklas tik ją atnaujina fone.

Ekranas  ──stebi (Flow)──▶  Room talpykla  ◀──rašo──  refresh() iš GET /menu
  • Skaitymas: ekranas prenumeruoja talpyklos Flow. Yra duomenų — rodo iškart (net be interneto).
  • Rašymas: refresh() nueina į serverį, gauna šviežią meniu ir perrašo talpyklą. Flow automatiškai vėl „iššauna", ir ekranas atsinaujina pats.

Tam naudosim Room — Google ORM biblioteką SQLite duomenų bazei. Trys dalys:

  • @Entity — Kotlin klasė, atitinkanti DB lentelės eilutę.
  • @Dao — sąsaja su užklausomis (@Query, @Insert), grąžinanti Flow.
  • @Database — sujungia esybes ir DAO į vieną duomenų bazę.

Talpykla įsijungia natūraliai į tai, ką jau turim: MenuRepository iš 5 pamokos paauga (skaito talpyklą, atnaujina iš tinklo), o Room objektai prijungiami per Koiną (6 pamoka) kaip dar keli single.

Verify-docs. Room čia — 2.x versija (androidx.room 2.8.x), NE 3.0. 3.0 keičia KSP/Gradle nustatymus; laikomės 2.x.