CV工程师
2024-09-27 12:08:21 阅读:166
在使用 Room 和 ViewModel 进行数据存储时,你可以按照以下步骤来初始化和管理你的 setting
表中的 key-value 数据。
首先,你需要定义一个数据实体类 Setting
,这将对应你的 setting
表。
import androidx.room.Entity
import androidx.room.PrimaryKey
@Entity(tableName = "setting")
data class Setting(
@PrimaryKey(autoGenerate = true) val id: Long = 0,
val key: String,
val value: String
)
接下来,创建一个 DAO(数据访问对象)来定义你的数据库操作。
import androidx.room.Dao
import androidx.room.Insert
import androidx.room.Query
import androidx.room.Update
import androidx.room.Delete
@Dao
interface SettingDao {
@Insert
suspend fun insert(setting: Setting)
@Query("SELECT * FROM setting WHERE key = :key LIMIT 1")
suspend fun getSettingByKey(key: String): Setting?
@Update
suspend fun update(setting: Setting)
@Delete
suspend fun delete(setting: Setting)
@Query("SELECT * FROM setting")
suspend fun getAllSettings(): List<Setting>
}
然后,创建一个数据库类来访问 SettingDao
。
import androidx.room.Database
import androidx.room.Room
import androidx.room.RoomDatabase
import android.content.Context
@Database(entities = [Setting::class], version = 1)
abstract class AppDatabase : RoomDatabase() {
abstract fun settingDao(): SettingDao
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
}
}
}
}
现在,创建 ViewModel 来处理你对数据的操作。
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import kotlinx.coroutines.launch
class SettingViewModel(private val repository: SettingRepository) : ViewModel() {
private val _settings = MutableLiveData<List<Setting>>()
val settings: LiveData<List<Setting>> get() = _settings
fun getSetting(key: String) {
viewModelScope.launch {
val setting = repository.getSettingByKey(key)
setting?.let {
// 处理查询到的设置
}
}
}
fun insert(setting: Setting) {
viewModelScope.launch {
repository.insert(setting)
loadAllSettings() // 插入后更新列表
}
}
fun loadAllSettings() {
viewModelScope.launch {
_settings.value = repository.getAllSettings()
}
}
// 其他增、删、改的方法
}
创建一个 Repository 来封装对 DAO 的访问。
class SettingRepository(private val settingDao: SettingDao) {
suspend fun insert(setting: Setting) {
settingDao.insert(setting)
}
suspend fun getSettingByKey(key: String): Setting? {
return settingDao.getSettingByKey(key)
}
suspend fun getAllSettings(): List<Setting> {
return settingDao.getAllSettings()
}
// 其他增、删、改的方法
}
在你的 Activity 或 Fragment 中初始化 ViewModel。
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
class MainActivity : AppCompatActivity() {
private val settingViewModel: SettingViewModel by viewModels {
SettingViewModelFactory(SettingRepository(AppDatabase.getDatabase(this).settingDao()))
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// 使用 ViewModel
settingViewModel.loadAllSettings()
}
}
通过以上步骤,你可以实现使用 Room 和 ViewModel 进行 key-value 数据的增查删改。在 ViewModel
中通过 viewModelScope
来执行数据库操作,这样可以确保操作在后台线程中进行,避免阻塞主线程。
评论
扫描二维码获取文章详情
更多精彩内容尽在:WWW.ZNGG.NET