Room és una biblioteca de persistència de dades que proporciona una capa d'abstracció sobre SQLite per permetre un accés més robust a la base de dades. Room simplifica la gestió de bases de dades en aplicacions Android, oferint una API més fàcil d'utilitzar i integrant-se amb LiveData i RxJava per a operacions asíncrones.
Objectius del Tema
- Comprendre què és Room i per què s'utilitza.
- Aprendre a configurar Room en un projecte Android.
- Crear entitats, DAOs (Data Access Objects) i la base de dades.
- Realitzar operacions bàsiques de CRUD (Create, Read, Update, Delete) amb Room.
- Configuració de Room
Afegir les Dependències
Per començar a utilitzar Room, necessitem afegir les dependències necessàries al fitxer build.gradle
del mòdul de l'aplicació.
dependencies { implementation "androidx.room:room-runtime:2.4.2" annotationProcessor "androidx.room:room-compiler:2.4.2" // Opcional: Room amb RxJava2 o RxJava3 implementation "androidx.room:room-rxjava2:2.4.2" implementation "androidx.room:room-rxjava3:2.4.2" // Opcional: Room amb Kotlin Coroutines implementation "androidx.room:room-ktx:2.4.2" }
Habilitar l'Anotació de Processament
Per utilitzar les anotacions de Room, hem d'habilitar l'anotació de processament. Afegiu el següent al fitxer build.gradle
del projecte:
android { ... defaultConfig { ... javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation": "$projectDir/schemas".toString()] } } } }
- Creació d'Entitats
Una entitat representa una taula a la base de dades. Cada camp de l'entitat representa una columna a la taula.
import androidx.room.Entity import androidx.room.PrimaryKey @Entity(tableName = "users") data class User( @PrimaryKey(autoGenerate = true) val id: Int, val name: String, val age: Int )
- Creació de DAOs
Els DAOs (Data Access Objects) són interfícies que defineixen les operacions de la base de dades. Utilitzem anotacions per definir les operacions de CRUD.
import androidx.room.Dao import androidx.room.Insert import androidx.room.Query @Dao interface UserDao { @Insert suspend fun insert(user: User) @Query("SELECT * FROM users") suspend fun getAllUsers(): List<User> @Query("DELETE FROM users") suspend fun deleteAllUsers() }
- Creació de la Base de Dades
La base de dades és una classe abstracta que extén RoomDatabase
i defineix els DAOs.
import androidx.room.Database import androidx.room.RoomDatabase @Database(entities = [User::class], version = 1) abstract class AppDatabase : RoomDatabase() { abstract fun userDao(): UserDao }
- Inicialització de la Base de Dades
Inicialitzem la base de dades utilitzant el patró Singleton per assegurar-nos que només hi ha una instància de la base de dades a tota l'aplicació.
import android.content.Context import androidx.room.Room object DatabaseProvider { @Volatile private var INSTANCE: AppDatabase? = null fun getDatabase(context: Context): AppDatabase { return INSTANCE ?: synchronized(this) { val instance = Room.databaseBuilder( context.applicationContext, AppDatabase::class.java, "app_database" ).build() INSTANCE = instance instance } } }
- Operacions Bàsiques de CRUD
Inserir un Usuari
val user = User(name = "John Doe", age = 30) val db = DatabaseProvider.getDatabase(context) db.userDao().insert(user)
Obtenir Tots els Usuaris
Esborrar Tots els Usuaris
Exercicis Pràctics
Exercici 1: Afegir un Nou Camp a l'Entitat
- Afegiu un nou camp
email
a l'entitatUser
. - Actualitzeu la base de dades per incloure el nou camp.
- Creeu una funció DAO per actualitzar l'email d'un usuari.
Solució
@Entity(tableName = "users") data class User( @PrimaryKey(autoGenerate = true) val id: Int, val name: String, val age: Int, val email: String // Nou camp ) @Dao interface UserDao { @Insert suspend fun insert(user: User) @Query("SELECT * FROM users") suspend fun getAllUsers(): List<User> @Query("DELETE FROM users") suspend fun deleteAllUsers() @Query("UPDATE users SET email = :email WHERE id = :id") suspend fun updateEmail(id: Int, email: String) // Nova funció DAO }
Resum
En aquesta secció, hem après a configurar Room en un projecte Android, crear entitats, DAOs i la base de dades, i realitzar operacions bàsiques de CRUD. Room simplifica la gestió de bases de dades en aplicacions Android, proporcionant una API més fàcil d'utilitzar i integrant-se amb altres components d'Android per a operacions asíncrones.
Curs d'Android Studio
Mòdul 1: Introducció a Android Studio
- Introducció a Android Studio
- Configuració d'Android Studio
- Comprensió de la Interfície d'Android Studio
- Creació del teu Primer Projecte Android
Mòdul 2: Desenvolupament Bàsic d'Android
- Comprensió de l'Estructura del Projecte Android
- Introducció als Dissenys XML
- Components Bàsics de la Interfície d'Usuari
- Introducció a les Activitats
- Executar la teva Aplicació en un Emulador
Mòdul 3: Desenvolupament Intermedi d'Android
- Introducció als Intents
- Treballar amb Fragments
- Gestió de l'Entrada de l'Usuari
- Ús de RecyclerView
- Xarxes en Android
Mòdul 4: Desenvolupament Avançat d'Android
- Persistència de Dades amb SQLite
- Ús de Room per a la Gestió de Bases de Dades
- Components Avançats de la Interfície d'Usuari
- Vistes Personalitzades i Canvas
- Treballar amb Tasques en Segon Pla
Mòdul 5: Desenvolupament Professional d'Android
- Implementació de l'Arquitectura MVVM
- Injecció de Dependències amb Dagger
- Proves Unitàries i Proves de la Interfície d'Usuari
- Publicació de la teva Aplicació a Google Play
- Optimització del Rendiment