查看图片
当我想将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}")
}
}