提问者:小点点

LiveData. value返回Null但Livedata Direct观察它获取结果


在此处查看图片

当我想将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)
    }
}

}


共1个答案

匿名用户

如果您不打算观察它,为什么要从您的存储库返回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}")
    }
}

相关问题