不从数据库的实时数据观察器获取任何数据



我想要的

我有一个连接到回收视图的房间数据库,该数据库由一个查询填充,该查询选择一个月中的所有数据。用户可以更改月份,我希望回收视图在用户每次更改月份时刷新数据。

问题

回收视图获取起始月份(在用户更改值之前(的正确数据。但是在用户调用 onNextMonthClick 函数后,RecyclingView 是空的(下个月可以(,但即使我们回到原来的月份,它也会保持空。

已经尝试过

使用我的日志,我发现onNextMonthClicked((中的onChange((方法在当月有数据时永远不会触发,但如果本月没有数据,它会触发。

如何再次加载数据?

month = Dates.getMonth();
mDiaryViewModel = new ViewModelProvider(this).get(DiaryViewModel.class);
mDiaryViewModel.getmEntriesMonth(month).observe(this, new Observer<List<Diary>>() {
@Override
public void onChanged(List<Diary> diaries) {
adapter.setEntries(diaries);
}
});

}
public void onNextMonthClick(View view) {
if (month < 12) {
month += 1;
} else {
month = 1;
}
adapter.setEntries(mDiaryViewModel.getmEntriesMonth((month)).getValue());
mDiaryViewModel.getmEntriesMonth(month).observe(this, new Observer<List<Diary>>() {
@Override
public void onChanged(List<Diary> diaries) {
adapter.setEntries(diaries);
}
});
}

完整的代码可以在这里找到

在你的代码中,每次调用NextMonth函数时都需要一个LiveData,但你永远不会拔掉旧的LiveData。因此,您有多个观察者更新回收器视图。您应该保存当前的 LiveData,并在 onNextMonth 函数中,首先应删除其观察器。代码

adapter.setEntries(mDiaryViewModel.getmEntriesMonth((month)).getValue());

无法工作,因为 LiveData 的值是异步更新的,请删除此行代码。最后一个建议是,如果你在片段中,你应该使用viewLifecycle end而不是这个作为生命周期所有者:

mDiaryViewModel.getmEntriesMonth(month).observe(getViewLifecycle(), new 
Observer<List<Diary>>() {
@Override
public void onChanged(List<Diary> diaries) {
adapter.setEntries(diaries);
}
});

最新更新