我使用日期转换器类来转换我的日期对象。但是,我仍然遇到一个错误说。错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。
我的日期转换器类
public class DateConverter {
@TypeConverter
public static Date toDate(Long dateLong){
return dateLong == null ? null: new Date(dateLong);
}
@TypeConverter
public static long fromDate(Date date){
return date == null ? null :date.getTime();
}
}
我的数据库表用于使用日期对象。
@Entity(tableName = "userFitnessDailyRecords")
@TypeConverters(DateConverter.class)
public class UserFitnessDailyRecords {
@NonNull
@PrimaryKey(autoGenerate = true)
public int id;
public Date forDay;
public Date getForDay() {
return forDay;
}
public void setForDay(Date forDay) {
this.forDay = forDay;
}
}
我按照谷歌代码持久性实验室的例子和普通软件室各自的GitHub示例。我正在使用房间版本1.0.0。
您将从Date转换为Long(包装器)和从long(原始)转换为Date。我将它改为Long并编译。此外,在转换器中取消装箱null会产生NPE。
public class DateConverter {
@TypeConverter
public static Date toDate(Long dateLong){
return dateLong == null ? null: new Date(dateLong);
}
@TypeConverter
public static Long fromDate(Date date){
return date == null ? null : date.getTime();
}
}
将转换器类放在数据库的类中,而不是在模型中:
@Database(entities = {
Patient.class,Medicine.class,Tooth.class,})
@TypeConverters({TimeConverter.class,OutBoundConverter.class})
public abstract class PatientDataBase extends RoomDatabase {//your data base}
我有同样的问题(如何将时间存储到Room),但我使用的是Calendar
,所以我做了这个:[注意:这个anwer用于日历]
@TypeConverter
public static Calendar toCalendar(Long l) {
Calendar c = Calendar.getInstance();
c.setTimeInMillis(l);
return c == null ? null : c;
}
@TypeConverter
public static Long fromCalendar(Calendar c){
return c == null ? null : c.getTime().getTime();
}