У меня есть список карт кадров. Каждый CardView содержит пользовательские данные, которые сохраняются в базе данных комнаты. Некоторые из обзоров Cardview имеют сроки, которые были введены пользователем с помощью расписания. Я установил фильтру для фильтрации полного списка, передавая давно введенную дату выполнения из временного времени. Метод DAO должен вернуть все обзор с сроками срока службы, которые находятся на или до введенной даты срока. Полный список возвращается, поэтому фильтрация не работает. Я выбрал долгое время, чтобы можно было передано нулевое значение для первоначальной сортировки полного списка. Первоначальная сортировка основана на критериях сортировки в базе данных. Чего мне здесь не хватает? < /P>
Activity
//filterButton press
Calendar cal = Calendar.getInstance();
duedate5 = cal.getTimeInMillis // the date selected by the user in the TimePicker.
mViewModel.setSortOrder(Repository.SortOrder.DB_FILTONORBEF, **duedate5**);
ViewModel
public class ViewModel extends AndroidViewModel {
...
public ViewModel(@NonNull Application application) {
repository = new Repository(application);
// set the initial sort, using the SortOrder field in the database and
// no due date is passed.
setSortOrder(Repository.SortOrder.DB_SORTORDER,null);
public void setSortOrder(Repository.SortOrder newOrder, **Long duedate5**) {
LiveData newSource = repository.getSortedItems(newOrder, **duedate5**);
...
}
}
Repository
public class Repository {
private final CardDao cardDao;
public Repository(Application application) {
CardRoomDatabase db = CardRoomDatabase.getDatabase(application);
cardDao = db.cardDao();
}
public LiveData getSortedItems(SortOrder order, **Long duedate5**) {
switch (order) {
case DB_SORTORDER:
return cardDao.getAllCards();
case DB_FILTONORBEF:
return cardDao.getFiltOnOrBeforeList(**duedate5**);
}
}
public enum SortOrder {
DB_SORTORDER,
DB_FILTONORBEF
}
CardDao
@Dao
public interface CardDao {
// For filtering the full RecyclerView List On or Before the entered Due date.
@Query("SELECT * FROM cards_table WHERE CardDuedatentime !=-1 AND" +
"CardDuedatentime < :dueDate5 ORDER BY CardDuedatentime ASC")
LiveData getFiltOnOrBeforeList(Long dueDate5);
}
Подробнее здесь: https://stackoverflow.com/questions/797 ... h-room-dao