LiveData.value返回Null但是Livedata直接观察它得到的结果



查看图片

当我想将live-data设置为可变的live数据时,我调用live data.getvalue(),但它返回null

private const val TAG = "MainViewModel">

@HiltViewModel类MainViewModel @Inject构造函数(私有val存储库:VaultRepository): ViewModel() {private var dashMutableData = mutableelivedata()var dashLiveData: LiveData= dashMutableData

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<CategoriesModel>

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

最新更新