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.timepackage。如果无法这样做,请参阅https://github.com/JakeWharton/ThreeTenABP以获取反向移植。

以上是 Android Room-错误:无法弄清楚如何将该字段保存到数据库中 的全部内容, 来源链接: utcz.com/qa/416545.html

回到顶部