在此处查看图片
当我想将live-data设置为可变的实时数据时,我调用live data. getvalue(),但它返回null
私有const val TAG="MainViewModel"
@HiltViewModel类MainViewModel@Inject构造函数(私有val存储库:VaultRepository):ViewModel(){私有var dashMutableData=MutableLiveData
init {
Log.d(TAG, " Init Executed ")
viewModelScope.launch(Dispatchers.Default) {
var liveData: LiveData<List<CategoriesModel>> = repository.getDashBoardData()
Log.d(TAG, "${liveData.value}")
dashMutableData.postValue(liveData.value)
}
}
}
如果您不打算观察它,为什么要从您的存储库返回LiveData
?您可以只返回List
LiveData
除非有观察者,否则没有值。如果添加观察者,一旦观察者触发一次,它就会得到一个值。
你不应该这样做,只是为了证明这一点,如果你在访问值之前添加一个观察者,它应该工作:
init {
Log.d(TAG, " Init Executed ")
viewModelScope.launch(Dispatchers.Default) {
var liveData: LiveData<List<CategoriesModel>> = repository.getDashBoardData()
livedata.observeForever(object: Observer<T> {
override fun onChanged(value: T) {
removeObserver(this)
}
})
delay(100) //not sure this is needed, just making sure the observer triggered once.
dashMutableData.postValue(liveData.value)
Log.d(TAG, "${liveData.value}")
}
}