我正试图使用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>
替换为具有字符串列表的列名