解码SavedStateHandle触发IllegalStateException:找不到类型,求排查解决
解决java.lang.IllegalStateException:SavedStateHandle类型不匹配问题
你的代码核心问题出在showPod的setter方法上:
savedStateHandle.set("showPod", value)需要接收原始Boolean值,但你传入的是MutableLiveData<Boolean>对象,类型不匹配直接触发了IllegalStateException。- getter方法的实现是正确的,
savedStateHandle.getLiveData<Boolean>("showPod")确实会返回对应的MutableLiveData<Boolean>实例。
修正后的代码如下:
class MainViewModel(application: Application, private val savedStateHandle: SavedStateHandle) : AndroidViewModel(application) { var showPod: MutableLiveData<Boolean> set(value) { // 提取LiveData中的Boolean值,存入SavedStateHandle savedStateHandle.set("showPod", value.value ?: false) } get() { // 给LiveData设置默认值,避免初始状态为null return savedStateHandle.getLiveData("showPod", false) } }
补充说明:
- setter中用
value.value ?: false做了非空兜底,防止LiveData值为null时存入无效数据 - getter中添加默认值
false,确保LiveData初始化后就有可用的布尔值,避免后续UI层处理null的麻烦
内容的提问来源于stack exchange,提问作者Gil Ong
相关产品推荐
相关产品推荐

