Android/Room/ViewModel:将ViewModel保存到Room数据库时出错
创始人
2024-08-20 07:30:10
0

此问题可能是由于ViewModel在保存之前已被销毁而导致的。为了解决这个问题,可以使用带有SavedStateHandle的ViewModel。

首先,使用SavedStateHandle创建一个带有状态的ViewModel:

class MyViewModel(private val state: SavedStateHandle) : ViewModel() {
    // 声明需要保存的状态变量
    var variable1: String = ""
    var variable2: Int = 0
    
    // 在onCleared()中保存状态变量
    override fun onCleared() {
        super.onCleared()
        state.set("variable1", variable1)
        state.set("variable2", variable2)
    }
}

然后,在使用ViewModel时,通过SavedStateViewModelFactory来创建一个带有SavedStateHandle的ViewModel:

val myViewModel: MyViewModel by viewModels {
        SavedStateViewModelFactory(requireActivity().application, this)
    }

最后,在使用Room数据库时,在onCleared()中保存ViewModel的状态:

override fun onCleared() {
    super.onCleared()
    viewModelScope.launch {
        withContext(Dispatchers.IO) {
            repository.saveData(myViewModel.variable1, myViewModel.variable2)
        }
    }
}

相关内容

热门资讯

黑科技有挂(智星德州扑克)po... 黑科技有挂(智星德州扑克)poker确实存在有挂!太夸张了最初是有挂(2025已更新)(哔哩哔哩)关...
黑科技辅助挂挂(wepokea... 黑科技辅助挂挂(wepokeai)微扑克大厅最初真的有挂!太无语了往昔有挂(2022已更新)(哔哩哔...
黑科技辅助挂(微扑克钻石)红龙... 红龙poker新手教程相关信息汇总(需添加指定威信136704302获取下载链接);黑科技辅助挂(微...
黑科技工具(Wepoke私人房... 【福星临门,好运相随】;黑科技工具(Wepoke私人房)哈糖大菠萝本然存在有挂!太夸张了从来真的有挂...
黑科技辅助挂挂(Wepoke漏... aapoKer赢率提升策略‌;黑科技辅助挂挂(Wepoke漏洞)aapoKer一贯存在有挂!太无语了...
黑科技脚本(德州之星ai)wp... 1、黑科技脚本(德州之星ai)wpk微扑克素来是真的有挂!太无语了一直是有挂(2025已更新)(哔哩...
黑科技线上(pokerwoel... 1、黑科技线上(pokerwoeld安卓下载)wpk俱乐部起初是真的有挂!太无语了本来是有挂(202...
黑科技实锤(wepoke规律)... 黑科技实锤(wepoke规律)We辅poker助最初是有挂!太离谱了好像有挂(2025已更新)(哔哩...
黑科技规律(cloudpoke... 黑科技规律(cloudpoker辅助透视)欢乐棋牌其实存在有挂!太嚣张了好像存在有挂(2025已更新...
黑科技存在(Wepoke轻量版... 黑科技存在(Wepoke轻量版)线上德州好像真的有挂!太嚣张了原先是真的有挂(2021已更新)(哔哩...