Массив БД комнаты с конструктором - PullRequest
0 голосов
/ 05 августа 2020

Я хочу sh использовать логический массив (с указанием c размера) в БД комнаты с конструктором. Как я его инициализирую и как пользоваться?

@Entity
data class RoleEntity(
@PrimaryKey(autoGenerate = true) var id: Long? = null,
@ColumnInfo(name = "title") var title: String?,
@ColumnInfo(name = "startTime") var startTime: Long?,
@ColumnInfo(name = "endTime") var endTime: Long?,
@ColumnInfo(name = "recurrence") var recurrence: BooleanArray,
@ColumnInfo(name = "priority") var priority: Int?
): Serializable {
constructor() : this(title = "", startTime = 0, endTime = 0, recurrence = ??, priority = 0)
}

1 Ответ

1 голос
/ 05 августа 2020

Для таких атрибутов необходимо использовать конвертеры, и в вашем случае я приведу свой пример, он у вас там будет по аналогии. @Convert(converter = ListJsonConverter::class) var list: List<Map<String, Any>>, Также сам конвертер

@Converter(autoApply = true)
class ListJsonConverter : AttributeConverter<List<Map<String, Any>>, String> {

private val objectMapper = ObjectMapper()

override fun convertToDatabaseColumn(attribute: List<Map<String, Any>>): String {
    return objectMapper.writeValueAsString(attribute)
}

override fun convertToEntityAttribute(dbData: String?): List<Map<String, Any>> {
    try {
        return dbData?.let { objectMapper.readValue<List<Map<String, Any>>>(it) } ?: emptyList()
    } catch (e: Exception){
        return emptyList()
    }
}

}

Здесь о них хорошо написано.

...