详细日志
error: Cannot figure out how to save this field into database. You can
consider adding a type converter for it.
private final java.util.Date mTime = null;
我有一个实体,其字段为
var mStartTime : Date = Date() // java.util.Date
为什么 Room 不能持久保存 Date 对象?什么是日期的最佳转换器?
Date
正是给出的例子https://developer.android.com/training/data-storage/room/referencing-data https://developer.android.com/training/data-storage/room/referencing-data.
例如,如果我们想要持久化 Date 的实例,我们可以编写以下 TypeConverter 来在数据库中存储等效的 Unix 时间戳:
public class Converters {
@TypeConverter
public static Date fromTimestamp(Long value) {
return value == null ? null : new Date(value);
}
@TypeConverter
public static Long dateToTimestamp(Date date) {
return date == null ? null : date.getTime();
}
}
前面的示例定义了 2 个函数,一个将 Date 对象转换为 Long 对象,另一个执行从 Long 到 Date 的逆转换。由于 Room 已经知道如何保存 Long 对象,因此它可以使用此转换器来保存 Date 类型的值。
接下来,将 @TypeConverters 注释添加到 AppDatabase 类,以便 Room 可以使用您为该 AppDatabase 中的每个实体和 DAO 定义的转换器:
应用程序数据库.java
@Database(entities = {User.class}, version = 1)
@TypeConverters({Converters.class})
public abstract class AppDatabase extends RoomDatabase {
public abstract UserDao userDao();
}
附注:java.util.Date
被认为设计得很糟糕(并且java.util.Calendar
更糟糕)。如果您有任何重要的日期时间逻辑并且可以摆脱 API 级别 26(桌面上的 Java 8),那么通常最好使用java.time package https://developer.android.com/reference/java/time/package-summary.html。如果你不能,请参阅https://github.com/JakeWharton/ThreeTenABP https://github.com/JakeWharton/ThreeTenABP用于向后移植。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)