Вставка данных с UUID из приложения Android в базу данных postgresAndroid

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Вставка данных с UUID из приложения Android в базу данных postgres

Сообщение Anonymous »

У меня есть модель данных, которая использует тип UUID в качестве первичного ключа. Однако, когда я пытаюсь вставить его в свою базу данных postgres, она выдает следующую ошибку:

Сериализатор не найден для типа «UUID». Чтобы использовать сериализатор контекста в качестве запасного варианта, явно аннотируйте тип или свойство с помощью @Contextual

Вот мой класс данных:

Код: Выделить всё

@Entity
@Serializable
data class TaskItem(
@Serializable(with = UUIDSerializer::class)
@PrimaryKey val id: UUID = UUID.randomUUID(),

@ColumnInfo(name = "task_title") var title: String,

@Serializable(with = LocalDateTimeSerializer::class)
@ColumnInfo(name = "task_created_at") val creationDate: LocalDateTime,

@ColumnInfo(name = "task_completed") var completed: Boolean = false,

@ColumnInfo(name = "task_tint") var color: Int,

@ColumnInfo(name = "task_description") var description: String = "",

@Serializable(with = UUIDSerializer::class)
@ColumnInfo(name = "task_created_by", defaultValue = "-1") val createdBy: UUID
)
Я пытался предоставить собственный сериализатор, но это не помогло.
Вот сериализатор:

Код: Выделить всё

import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.time.LocalDateTime
import java.time.format.DateTimeFormatter

object LocalDateTimeSerializer : KSerializer {
private val formatter = DateTimeFormatter.ISO_LOCAL_DATE_TIME

override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("LocalDateTime", PrimitiveKind.STRING)

override fun serialize(encoder: Encoder, value: LocalDateTime) {
encoder.encodeString(value.format(formatter))
}

override fun deserialize(decoder: Decoder): LocalDateTime {
return LocalDateTime.parse(decoder.decodeString(), formatter)
}
}

Код: Выделить всё

import kotlinx.serialization.KSerializer
import kotlinx.serialization.descriptors.PrimitiveKind
import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.encoding.Decoder
import kotlinx.serialization.encoding.Encoder
import java.util.UUID

object UUIDSerializer : KSerializer {
override val descriptor: SerialDescriptor =
PrimitiveSerialDescriptor("UUID", PrimitiveKind.STRING)

override fun serialize(encoder: Encoder, value: UUID) {
encoder.encodeString(value.toString())
}

override fun deserialize(decoder: Decoder): UUID {
return UUID.fromString(decoder.decodeString())
}
}
Вот как выглядит моя таблица:
Изображение

Буду признателен за любую информацию по этому поводу. Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/787 ... s-database
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»