房间使用日期字段

问题描述 投票:4回答:3

我使用日期转换器类来转换我的日期对象。但是,我仍然遇到一个错误说。错误:无法弄清楚如何将此字段保存到数据库中。您可以考虑为其添加类型转换器。

我的日期转换器类

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。

android android-room android-database android-date
3个回答
16
投票

您将从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();
    }
}

3
投票

将转换器类放在数据库的类中,而不是在模型中:

@Database(entities = {
    Patient.class,Medicine.class,Tooth.class,})

@TypeConverters({TimeConverter.class,OutBoundConverter.class})

public abstract class PatientDataBase extends RoomDatabase {//your data base}

1
投票

我有同样的问题(如何将时间存储到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();
  }
© www.soinside.com 2019 - 2024. All rights reserved.