我有以下代码:
class AddViewModel(application: Application) : AndroidViewModel(application) {
val readAllData: LiveData<List<DutyDay>>
private val repository: DutyDayRepository
init {
val dutyDayDao = DutyDayDatabase.getDatabase(
application
).dutyDayDao()
repository = DutyDayRepository(dutyDayDao)
readAllData = repository.readAllData
val date = readAllData.value?.get(1)?.date
}
如您所见,readAllData是类型为dutyDay的LiveData列表。 我正在从Room数据库中获取数据,并且该数据库不是空的,我在recyclerView中使用了它,一切正常。
但是,当我尝试从我的readAllData列表的索引1(在代码示例的最后一行)中的dutyDay对象中检索日期时,该变量在调试时包含null,而在数据库中显然不是null,如图所示在recyclerView中? (在示例中不可见)...
我在做什么错了?
感谢您的帮助:-)
答案 0 :(得分:4)
由于LiveData是生命周期感知组件,因此它只有在观察到数据后才会加载任何数据
因此,当将其加载到recyclerView中时,您将对其进行观察/订阅,因此一旦数据库具有该值,它将更新实时数据,并且您还将在get()调用中接收该值
但是这里发生的是您的get()调用正在寻找您的livedata对象的最后一个值,由于没有被观察,它的值为空