在带有房间的android中查询最近七天的行



我正试图使用android房间从我的sqlite数据库中获取项目。我有一个应用程序可以跟踪狗上厕所的情况。

我的DAO看起来像

@Query("SELECT * FROM potty_events_table ORDER BY datetime DESC")
fun getPottyEvents(): LiveData<List<PottyEventModel>>
@Query("SELECT * FROM potty_events_table WHERE datetime >= DATE('now', '-7 day')")
fun getPottyEventsFromLastWeek(): LiveData<List<PottyEventModel>>

"上厕所"活动效果不错,但上周的活动就不一样了。我还使用以下转换器。当我试图调用我的getPottyEventsFromLastWeek时,我得到了一个空数组。

@TypeConverter
fun fromTimestamp(value: Long): Calendar? {
return value.let {
val c = Calendar.getInstance()
c.timeInMillis = it
c
}
}
@TypeConverter
fun calendarToTimestamp(calendar: Calendar?): Long? {
return calendar?.timeInMillis
}

如果您的应用程序API级别超过26,您可以使用DateTimeFormatter并将时间保存在数据库中作为字符串。

所以你的转换器看起来像

private DateTimeFormatter formatter = DateTimeFormatter.ISO_OFFSET_DATE_TIME;
@TypeConverter
public OffsetDateTime toOffsetDateTime(String string) {
return formatter.parse(string, OffsetDateTime::from);
}
@TypeConverter
public String fromOffsetDatetime(OffsetDateTime offsetDateTime) {
return offsetDateTime.format(formatter);
}

我使用它是因为它在跨多个时区时传输良好

那么你的DOA会稍微改变为

@Query("SELECT * FROM potty_events_table ORDER BY datetime(<example>)")
fun getPottyEvents(): LiveData<List<PottyEventModel>>

只需将<example>替换为具有字符串列表的列名

最新更新