Контекст
В приложении, которое я создаю, в моей базе данных есть две таблицы: - первая заполнена ПОЛЬЗОВАТЕЛЯМИ :
@Entity(tableName = "table_User")
public class User {
@PrimaryKey (autoGenerate = true)
private int id = 0;
@ColumnInfo(name = "firstName")
private String firstName;
@ColumnInfo(name = "lastName")
private String lastName;
@ColumnInfo(name = "soprannome")
@NonNull
private String soprannome;
- во втором мне нужно сохранить пары пользователей (с разбивкой по дням), которые я сохраняю ID ПОЛЬЗОВАТЕЛЕЙ :
@Entity(tableName = "table_Couple")
public class Couple {
@ColumnInfo(name = "user_1")
private Integer id_user_1;
@ColumnInfo(name = "user_2")
private Integer id_user_2;
@ColumnInfo(name = "day")
private int day;
@PrimaryKey (autoGenerate = true)
private Integer id;
Поскольку приложение довольно маленькое, у меня есть уникальный ViewModel , репозиторий , который я использую для организации вызовов на Dao и выполнить фактические вызовы в базу данных
Моя конкретная проблема
Мне нужно получить Список из ПОЛЬЗОВАТЕЛЕЙ , которые появляются в ПАРАХ , которые имеют тот же ДЕНЬ , и поместить его в RecyclerView , чтобы показать их. Я нашел решение, которое меня не устраивает, потому что даже при небольшом объеме данных он медленный и неаккуратный.
private List<Couple> CoupleList;
mViewModel = new ViewModelProvider(this).get(ViewModel.class);
//Here we make the call to get all the couple **ON THE MAIN THREAD, WITHOUT USING LIVEDATA**
couplesList = mWordViewModel.getCouplesByDay(fragmentDayId);
//Parsing from *list* of *COUPLES* to *list* of *INT*
List<Integer> CouplesListParsed = new ArrayList<Integer>();
for (Couple eq : CouplesList){
couplesListParsed.add(eq.getId_user_1());
couplesListParsed.add(eq.getId_user_2());
}
// Add an observer on the LiveData
mWordViewModel.getUsersById(CoupleListParsed).observe(this, new Observer<List<Users>>() {
@Override
public void onChanged(@Nullable final List<User> users) {
// Update the cached copy of the users in the adapter.
adapter.setWords(users);
}
});
Вызванные методы:
public List<Equipaggio> getCouplesByDay( Integer dayId) { return mRepository.getCouplesByDay(dayId); }
public LiveData<List<Allievo>> getUsersById(List<Integer> id) { return mRepository.getUsersById(id); }
Я почти уверен, что мои проблемы связаны с запросом к базе данных getEquipaggiByDay в главном потоке, но я не могу понять, как это исправить, поскольку создание LiveData, похоже, не делает смысл и вызов новой темы на самом деле не кажутся мне решением.
Актуальный вопрос
Так что, возможно, моя проблема может быть сведена к: Как правильно / эффективно составить запрос, для выполнения которого нужны данные из другой таблицы
Это мой первый вопрос, так что go просто для меня, и если в коде, о котором я сообщил, чего-то не хватает, не стесняйтесь указывать это из. Кроме того, я начал опасаться, что может быть какая-то большая проблема с архитектурой или плохая практика в действии, не стесняйтесь указывать на это тоже.