Android 为什么Transformation.switchMap(anyLiveData)不是';当我更改“t”的值时不会激发;anyLiveData“;

Android 为什么Transformation.switchMap(anyLiveData)不是';当我更改“t”的值时不会激发;anyLiveData“;,android,kotlin,android-livedata,mutablelivedata,Android,Kotlin,Android Livedata,Mutablelivedata,我希望当我调用“addPlantToGarden()”传递尊重“plantId”参数时,然后触发“Observators”转换。switchMap(plantName)”但这不会发生,错误是什么 private val plantName:MutableLiveData=MutableLiveData() val plant:LiveData=Transformations.switchMap(plantName){plantId-> plantRepository.getPlant(plan

我希望当我调用“addPlantToGarden()”传递尊重“plantId”参数时,然后触发“Observators”转换。switchMap(plantName)”但这不会发生,错误是什么


private val plantName:MutableLiveData=MutableLiveData()
val plant:LiveData=Transformations.switchMap(plantName){plantId->
plantRepository.getPlant(plantId)
}
val isPlanted:LiveData=Transformations.switchMap(plantName){plantId->
gardenPlantingRepository.isPlanted(plantId)
}
fun addplantogarden(plantId:String){
plantName.value=plantId
}

以下是一些需要考虑的事项:

1。检查您的存储库

确保
plantRepository.getPlant(plantId)
返回LiveData。由于存储库中的方法是在后台执行的,因此我更喜欢使用以下方法封装函数:

liveData {
    // some async process (e.g. HTTP Request)
    emit(/*your value*/)
}
参考:

2。检查您的观察者

您是否以正确的视图观察生命周期所有者?如果ViewModel位于片段中,请确保执行以下操作:

viewModel.plant.observe(viewLifecycleOwner, Observer{
    // action
})
而不是:

viewModel.plant.observe(this, Observer{
    // action
})
在尝试更改
plantName
值之前,请确保先观察

3。从一个简单的案例开始

我不知道您是如何更改
plantName
值的。但首先尝试使用简单的硬编码/模拟值,例如:

plantName.value = "1"
然后通过您的存储库跟踪它,然后向下跟踪到您的观察者。希望这能对你有所帮助