Android Room-错误:无法弄清楚如何将该字段保存到数据库中
详细日志
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
为什么房间不能保留日期对象?什么是Date的最佳转换器?
回答:
Date
正是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定义的转换器:
AppDatabase.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://github.com/JakeWharton/ThreeTenABP以获取反向移植。
以上是 Android Room-错误:无法弄清楚如何将该字段保存到数据库中 的全部内容, 来源链接: utcz.com/qa/416545.html