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)
        }
    }
}

相关内容

热门资讯

玩家实测!德扑之星可以抽水(透... 玩家实测!德扑之星可以抽水(透视)原来真的有挂(详细教程)(有挂技巧)-哔哩哔哩;德扑之星可以抽水简...
8分钟了解!德州微扑克辅助,p... 8分钟了解!德州微扑克辅助,pokerworld软件,其实真的有挂(有挂方法)-哔哩哔哩;德州微扑克...
推荐十款!云扑克确实真的有挂(... 推荐十款!云扑克确实真的有挂(辅助挂)透视辅助(有挂总结)-哔哩哔哩,亲,有的,ai轻松简单,又可以...
透视数据(云扑克辅助器日租版)... 透视数据(云扑克辅助器日租版)软件透明挂(透视)确实真的有挂(有挂总结)-哔哩哔哩是一款可以让一直输...
辅助透视(约局吧是正规的)软件... 辅助透视(约局吧是正规的)软件透明挂(透视)的确真的有挂(有挂攻略)-哔哩哔哩是一款可以让一直输的玩...
透明神器!哈糖大菠萝有外挂,德... 透明神器!哈糖大菠萝有外挂,德州app辅助器,其实是真的有挂(有挂介绍)-哔哩哔哩;玩家在哈糖大菠萝...
最新技巧!云扑克辅助器苹果(透... 1、最新技巧!云扑克辅助器苹果(透视)软件透明挂(有挂介绍)-哔哩哔哩。2、云扑克辅助器苹果透视辅助...
查到实测(扑克时间软件)透视辅... 查到实测(扑克时间软件)透视辅助(辅助挂)的确是真的有挂(有挂透明)-哔哩哔哩;扑克时间软件是一款益...
透明辅助(手机德州app辅助)... 透明辅助(手机德州app辅助)软件透明挂(辅助挂)的确真的有挂(有挂总结)-哔哩哔哩;科技安装教程;...
我来教教你(哈糖大菠萝切牌规律... 我来教教你(哈糖大菠萝切牌规律)软件透明挂(辅助挂)确实是真的有挂(有挂透明)-哔哩哔哩1、玩家可以...