LiveData返回空值,即使它包含一个值

时间:2020-11-09 08:17:29

标签: kotlin android-room android-livedata

我有以下代码:

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中? (在示例中不可见)...

我在做什么错了?

感谢您的帮助:-)

1 个答案:

答案 0 :(得分:4)

由于LiveData是生命周期感知组件,因此它只有在观察到数据后才会加载任何数据

因此,当将其加载到recyclerView中时,您将对其进行观察/订阅,因此一旦数据库具有该值,它将更新实时数据,并且您还将在get()调用中接收该值

但是这里发生的是您的get()调用正在寻找您的livedata对象的最后一个值,由于没有被观察,它的值为空