Поле «Использование даты» - PullRequest
0 голосов
/ 13 мая 2018

Я использую класс конвертера даты для преобразования моего объекта даты. Тем не менее, я все еще сталкиваюсь с ошибкой, говоря. ошибка: не могу понять, как сохранить это поле в базе данных. Вы можете добавить для него конвертер типов.

Класс My Date Converter

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;
        }
    }

Я последовал примеру из лабораторий сохранения кода Google и из комнаты общего пользования соответствующего примера GitHub. Я использую номер версии 1.0.0.

Ответы [ 3 ]

0 голосов
/ 17 марта 2019

Поместите класс преобразователя в класс базы данных, а не в модель:

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

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

public abstract class PatientDataBase extends RoomDatabase {//your data base}
0 голосов
/ 09 мая 2019

У меня была такая же проблема (как хранить время в комнате), но я использовал Calendar, поэтому я сделал это: [ примечание : этот ответ для Календарь ]

  @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();
  }
0 голосов
/ 13 мая 2018

Вы конвертируете из Date в Long (обертка) и из long (примитив) в Date.Я изменил его на Long, и он скомпилирован.Кроме того, распаковка пустого значения в вашем конвертере дает 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();
    }
}
...