【发布时间】:2020-03-27 17:24:55
【问题描述】:
我想查询一个家庭中的所有鸟类,但我不知道该怎么做。到目前为止我已经这样做了,但我觉得我错过了一些东西:
道:
@Query("Select * from bird WHERE family=:family")
public LiveData<List<Bird>> getBirdsFromFamily(String family);
存储库:
private LiveData<List<Bird>> allBirdsFromFamily;
private String family;
public BirdRepository(Application application){
Database database = Database.getInstance(application);
dao = database.dao();
allBirdsFromFamily = dao.getBirdsFromFamily(family);
}
public LiveData<List<Bird>> getBirdsFromFamily(String family){
return allBirdsFromFamily;
}
查看模型:
private LiveData<List<Bird>> allBirdsFromFamily;
private String family;
public BirdViewModel(@NonNull Application application) {
super(application);
birdRepository = new BirdRepository(application);
allBirdsFromFamily = birdRepository.getBirdsFromFamily(family);
}
public LiveData<List<Bird>> getAllBirdsFromFamily(String family)
{
return allBirdsFromFamily;
}
我有一份家庭清单和一份鸟类清单。
单击家庭列表中的一项时,我想打开一个包含所有鸟类的列表。我可以从项目中取出字符串,但是当我调用该方法时什么也没有出现。
String family = intent.getStringExtra(AddEditFamilyActivity.EXTRA_FAMILY);
birdViewModel.getAllBirdsFromFamily(family).observe(this, new Observer<List<Bird>>() {
@Override
public void onChanged(@Nullable List<Bird> birds) { //everytime something changes, the adaptater is updated
//update the recycler view
adapter.submitList(birds);
}
});
【问题讨论】:
-
您有什么问题,我们需要更多详细信息
-
您的问题到底是什么?我注意到您的
ViewModel中有一个小错误,您不需要getAllBirdsFromFamily中的变量,因为它返回您的LiveData,您是如何在后台管理查询的? -
你的
family字符串可能为空,应该是MutableLiveData<String>switchMapped到Dao Query方法中 -
@Biscuit 我没有这个查询的doInBackGround,我应该怎么做?
-
@EpicPandaForce 这就是我的想法,但调试器在单击上一个家庭项目时找到了我想要的正确字符串
标签: java android database android-asynctask android-room