【发布时间】:2019-04-09 14:02:50
【问题描述】:
我有一个使用库Room Persistence Library的应用。
现在我有这个问题:
我的 ViewModel 中有:
public LiveData<List<Code>> getAllCodes() {
return codeRepository.getAllCodes();
}
在我的codeRepository中:
public LiveData<List<Code>> getAllCodes() {
return appDatabase.codeDao().getAll();
}
在我的 DAO
@Query("SELECT * FROM codes ORDER BY id DESC")
LiveData<List<Code>> getAll();
所以在我的活动中我可以这样做:
codeViewModel.getAllCodes().observe(this, new Observer<List<Code>>() {
@Override
public void onChanged(@Nullable final List<Code> codes) {
adapter.addItems(codes);
}
});
它可以工作,但现在,在另一个活动中,我调用了一个函数,我需要调用 RoomDatabase 获取所有代码并创建一个 CSV。 我的问题是我这样做:
download_csv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
codeViewModel.getAllCodes().observe(this, new Observer<List<Code>>() {
@Override
public void onChanged(@Nullable final List<Code> codes) {
download(codes);
}
});
}
});
但是每次将代码模型添加到我的数据库中它都会调用下载。 那么如何从我的数据库中获取一次时间数据呢? 我应该创建第二个仅返回 List 的函数还是有更简洁的方法?
【问题讨论】:
-
你为什么不尝试在onclick之外获取代码?定义一个变量来保存代码,并且由于您设置了观察者,因此每当您调用代码变量时,它将始终具有列表的最新版本
-
说实话,我没明白你的问题是什么,你能试着用不同的方式解释吗?你想导出你的数据吗?
-
@joao86 是的,可以的,我试试!
-
@BrunoDiegoMartins 是的,我想导出我的数据
标签: android android-room