Используйте TypeConverters комнаты на нескольких полях - PullRequest
0 голосов
/ 03 марта 2019

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

@TypeConverters(DateConverters::class)
@NonNull
@ColumnInfo(name = "create_date")
var createDate: Date

@TypeConverters(DateConverters::class)
@NonNull
@ColumnInfo(name = "update_date")
var updateDate: Date

create_date и update_date оба являются Date объектами в моем классе модели, но они сохраняются как String в базе данных.Для этого я создал DateConverters класс:

object DateConverters {
    @TypeConverter
    fun toDate(value: String): Date {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.parse(value)
    }

    @TypeConverter
    fun toString(value: Date): String {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.format(value)
    }
}

Но когда я пытаюсь запустить свое приложение, мне нужно следующее сообщение об ошибке:

error: DateConverters() has private access in DateConverters

Я также добавляю, что раньше у меня было только поле create_date, и у меня не было проблем при запуске приложения.

Можете ли вы сказать мне, что я делаю неправильно?

Заранее спасибо!

1 Ответ

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

Похоже, проблема может заключаться либо в использовании object вместо class, либо в именах методов конвертера.Я рекомендую переписать DateConverters следующим образом:

class DateConverters {
    @TypeConverter
    fun fromString(value: String): Date {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.parse(value)
    }

    @TypeConverter
    fun dateToString(value: Date): String {
        val simpleDateFormat = SimpleDateFormat(PATTERN, Locale.getDefault())
        return simpleDateFormat.format(value)
    }
}

Кроме того, я рекомендую хранить значения как Long, а не String, как описано в samples , а затем использоватьSimpleDateFormat на уровне без данных.

...