Suas ideias em realidade digital!
Room é a biblioteca oficial do Android para persistência local baseada em SQLite. Ela fornece:
implementation "androidx.room:room-runtime:2.6.1"
kapt "androidx.room:room-compiler:2.6.1"
implementation "androidx.room:room-ktx:2.6.1"
Se usar Kotlin:
plugins {
id 'kotlin-kapt'
}
@Entity(tableName = "users")
data class UserEntity(
@PrimaryKey(autoGenerate = true)
val id: Int = 0,
val name: String,
val email: String
)
@Dao
interface UserDao {
@Insert(onConflict = OnConflictStrategy.REPLACE)
suspend fun insert(user: UserEntity)
@Query("SELECT * FROM users")
fun getAll(): Flow<List<UserEntity>>
@Delete
suspend fun delete(user: UserEntity)
}
@Database(entities = [UserEntity::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun userDao(): UserDao
companion object {
@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
}
}
}
}
class UserRepository(private val dao: UserDao) {
val users: Flow<List<UserEntity>> = dao.getAll()
suspend fun insert(user: UserEntity) {
dao.insert(user)
}
suspend fun delete(user: UserEntity) {
dao.delete(user)
}
}
class UserViewModel(
private val repository: UserRepository
) : ViewModel() {
val users = repository.users.asLiveData()
fun insert(user: UserEntity) {
viewModelScope.launch {
repository.insert(user)
}
}
}
Room fica na camada Data da Clean Architecture.
Veja também: