В моем коде возникла проблема, которая, как я подозреваю, может быть вызвана самим собой.Поэтому я, вероятно, должен сначала ответить на этот вопрос.Могу ли я / как наблюдать объект LiveData, возвращаемый из Dao, который основан на запросе внутреннего соединения и параметре List?
К сожалению, у меня пока нет «10 репутации» в Stackoverflow, так что, очевидно,Я не могу встроить изображение.Но вот мой снимок ERD, поскольку он может помочь вам увидеть, как мои сущности связаны друг с другом: https://i.ibb.co/9YW0Vbx/Screenshot-at-2019-04-06-13-04-43.png
PrayerListFragment
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
mTagViewModel = ViewModelProviders.of(this).get(TagViewModel.class);
mPrayerTagViewModel =
ViewModelProviders.of(this).get(PrayerTagViewModel.class);
...
//Update the tag list with the selected tags
mTagViewModel.getSelectedTags().observe(this, new Observer<List<Tag>>() {
@Override
public void onChanged(@Nullable List<Tag> tags) {
if(tags.size() > 0) {
mPrayerTagViewModel.setTagList(tags);
}
}
});
//Observe whatever prayers the view model has to show us
mPrayerTagViewModel.getPrayers().observe(this, new Observer<List<Prayer>>() {
@Override
public void onChanged(@Nullable List<Prayer> prayers) {
mPrayersAdapter.setPrayers(prayers);
}
});
...
}
PrayerTagViewModel
...
private List<String> mTagNames = new ArrayList<>();
...
public LiveData<List<Prayer>> getPrayers() { return getPrayersForTags(mTagNames); }
...
public void setTagList(List<Tag> tags) {
mTagNames = new ArrayList<>();
for (Tag tag: tags) {
mTagNames.add(tag.getName());
}
}
ITagDAO
Возвращает объекты LiveData, которые я без проблем наблюдаю:
@Query("SELECT * FROM tag_table ORDER BY name")
LiveData<List<Tag>> getAll();
@Query("SELECT * FROM tag_table WHERE selected ORDER BY name")
LiveData<List<Tag>> getSelected();
IPrayerTagDAO
Но я сталкиваюсь с проблемами, наблюдающими это, поэтому я сначала хочу убедиться, что это правильный синтаксис:
@Query("SELECT * FROM prayer_table " +
"INNER JOIN prayertag_table " +
"ON summary=fk_summary " +
"WHERE fk_name IN (:names)")
LiveData<List<Prayer>> getPrayersForTags(final List<String> names);
Если это правильный синтаксис, могу ли я потерять свой наблюдаемый в моем фрагменте, потому что вызов getPrayers() в PrayerTagViewModel возвращает новую ViewModel, т.е. другую ViewModel, чем та, которую я начал наблюдать во фрагменте ??