#android #android-room
#Android #android-room
Вопрос:
Я пытаюсь получить данные за текущую неделю и месяц в Room. Я создал запрос на текущий день, и он работает, но другие не работают.
Запрос дня (этот работает):
@Query("SELECT * FROM expense_table WHERE day = strftime('%d', 'now')")
LiveData<List<Expense>> getExpensesDay();
Неделя:
@Query("SELECT * FROM expense_table WHERE week = strftime('%W', 'now')")
LiveData<List<Expense>> getExpensesWeek();
Месяц:
@Query("SELECT * FROM expense_table WHERE month = strftime('%m', 'now')")
LiveData<List<Expense>> getExpensesMonth();
Сущность:
@Entity(tableName = "expense_table")
public class Expense {
@PrimaryKey(autoGenerate = true)
private int expenseId;
private String note;
private Double value;
private String type;
private Long dateLong = System.currentTimeMillis();
private String date = new SimpleDateFormat("MM/yyyy").format(new Date(dateLong));
private static Calendar cal = Calendar.getInstance();
private int month = cal.get(Calendar.MONTH);
private int week = cal.get(Calendar.WEEK_OF_YEAR);
private int day = cal.get(Calendar.DAY_OF_MONTH);
private int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);
private String weekDay = new DateFormatSymbols().getWeekdays()[dayOfWeek];
Ответ №1:
Согласно документам, strftime('%W', ...)
заменяет неделю года на основе 0 и Calendar.get(Calendar.WEEK_OF_YEAR)
возвращает неделю года на основе 1. Аналогично, strftime('%m', ...)
заменяет неделю года на основе 1 и Calendar.get(Calendar.MONTH)
возвращает неделю года на основе 0.
Итак, попробуйте заменить вычисление полей в вашем Entity
классе:
private int month = cal.get(Calendar.MONTH) 1;
private int week = cal.get(Calendar.WEEK_OF_YEAR) - 1;
вместо
private int month = cal.get(Calendar.MONTH);
private int week = cal.get(Calendar.WEEK_OF_YEAR);
Комментарии:
1. Это так странно, но когда я попробовал это в первый раз, это не сработало, теперь это работает. Может быть, у меня что-то не так в моем запросе? Я не знаю. Спасибо за вашу помощь. Теперь все работает.