Android Комната - Преобразователь типов не работает в области действия объекта - PullRequest
1 голос
/ 09 апреля 2020

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

Например: когда я добавляю конвертер типов в такой области видимости сущности она работает нормально.

@Entity(tableName = "chat_history")
@TypeConverters(ChatEntityConverter::class)
class ChatHistoryEntity (
    @PrimaryKey
    @NonNull
    @ColumnInfo(name = "history_id") val HID: Long?,
    @ColumnInfo(name = "history_name") var pairedName: String?,
    @ColumnInfo(name = "history_last_message") var lastMessage: String?,
    @ColumnInfo(name = "history_last_date")
    var lastDate: Date?
)

Но если я переместу ее в область видимости поля сущности, она не будет скомпилирована. :

error: Cannot figure out how to save this field into database.

Мой конвертер:

class ChatEntityConverter {
    @TypeConverter
    fun fromTimeStamp(date: Long?): Date? {
        return when(date) {
            null -> null
            else -> Date(date)
        }
    }

    @TypeConverter
    fun dateToTimeStamp(date: Date?): Long? {
        return when(date) {
            null -> null
            else -> date.time
        }
    }
}

Поскольку он также конвертирует длинный тип в тип даты, я не хочу, чтобы он работал в области действия сущности. Только в поле типа даты. Но я просто не мог его туда скомпилировать.

1 Ответ

0 голосов
/ 09 апреля 2020

@TypeConverters работает на поле. Вы используете Kotlin, поэтому вы работаете напрямую со свойствами. Чтобы применить аннотацию к основному полю, используйте @field:TypeConverters вместо @TypeConverters.

...