在 Room 中选择当天的任务

Selection of tasks for the current day in Room

Room 数据库使用 date/time 个字段实现任务 class。

@ColumnInfo(name = TaskEntry.COLUMN_CREATE_DATE)
@TypeConverters({LocalDateTimeConverter.class, LDateTimeConverter.class})
private LocalDateTime createDate;
@ColumnInfo(name = TaskEntry.COLUMN_FINISH_DATE)
@TypeConverters({LocalDateTimeConverter.class, LDateTimeConverter.class})
private LocalDateTime finishDate;

实现了一个功能,用于选择今天可用但未完成的任务,但其结果将被忽略,并且会发布没有选定日期范围的完整任务列表。

@Query("Select * from " + TaskEntry.TABLE_NAME
+ " where (" + TaskEntry.COLUMN_CREATE_DATE + " >= :startDayTime"
+ " or " + TaskEntry.COLUMN_FINISH_DATE + " < :endDayTime)"
+ " and " + TaskEntry.COLUMN_FINISHED + " = 0")
LiveData<List<Task>> getLiveDailyTasks(Long startDayTime, Long endDayTime);

怀疑这种通过转换比较的方法行不通,那怎么还能实现呢?

There is a suspicion that this method of comparison through conversion does not work

运行 来自 Android Studio 的应用程序。在访问数据库后等待用户输入时,然后使用 App Inspection。查看 TaskEntry table 值是否按预期存储?如果是这样,那么 TypeConverter 的可能性就大了。

接下来单击“打开新查询”图标(table 带镜子)然后访问您的 DAO class 并单击有问题的@Query 旁边的相同图标,输入 suitable 值并单击 运行。如果数据按预期显示,则查询正常,因此请查看 LiveData 方面。

这是一个通过屏幕截图的演示(显然使用不同的应用程序和数据库,但时间存储长到秒的精度):-

点击后 运行 :-