Room talpykla — Entity, DAO, Database
Trys failai kodo stulpelyje kaip skirtukai, priklausomybių tvarka: MenuItemEntity.kt → MenuDao.kt → PicaDatabase.kt (eilutė, tada kaip ją skaityti/rašyti, tada bazė, kuri ją laiko).
1. MenuItemEntity.kt — talpyklos eilutė. Ji atskira nuo domeno MenuItem (2 pamoka): esybė gyvena core/data/local (saugojimo sluoksnis), turi @Entity ir @PrimaryKey, o MenuItem lieka švarus modelis, kurį rodo UI. Juos atvaizduojam vienas į kitą.
Pirma pridėk Room priklausomybes build.gradle.kts (stack-when-needed; Room 2.x, ne 3.0):
implementation(libs.androidx.room.runtime)
implementation(libs.androidx.room.ktx) // Flow + suspend palaikymas
ksp(libs.androidx.room.compiler) // plugin: id("androidx.room") + id("com.google.devtools.ksp")
2. MenuDao.kt — kaip skaitai ir rašai. Esminė asimetrija: skaitymai grąžina Flow (gyvas srautas — UI persipiešia, kai lentelė pasikeičia), rašymai yra suspend (insertAll, clearAll).
3. PicaDatabase.kt — pati bazė: @Database(entities = [MenuItemEntity::class], version = 1), atskleidžianti menuDao().
Spąstai (schemos migracija).
version = 1— svarbus. Jei vėliau pakeisi esybę (pridėsi stulpelį) ir nepadidinsi versijos, Room mesIllegalStateExceptionapie neatitinkančią schemą. O padidinęs versiją (version = 2) be migracijos gausi:java.lang.IllegalStateException: A migration from 1 to 2 was required but not found.Sprendimai: parašyk
Migration(1, 2)(išsaugo duomenis) arba — talpyklai —.fallbackToDestructiveMigration()(išmeta ir atkuria; talpyklai tinka, nes serveris yra tiesos šaltinis). Niekada tiesiog nedidink versijos „kad susikompiliuotų".