Однако я сталкиваюсь с ошибками в сложных объектах. Я подозреваю, что это соглашение об именах и/или ошибки в моем подходе.
Класс данных, используемый модификацией для сериализации Json, выглядит следующим образом:
Код: Выделить всё
data class Order(
val id: Int,
val name: String,
val items: List
)
data class Item(
val id: Int,
val name: String,
val description: String,
val address: Address
)
data class Address(
val address: String
val zip: String
)
Код: Выделить всё
syntax = "proto3";
option java_package = "com.mcdonalds.app";
option java_multiple_files = true;
message LastOrder {
Order order = 1;
}
message Order {
int32 id = 1;
string name = 2;
repeated Item items = 3;
}
message Item {
int32 id = 1;
string name = 2;
string description = 3;
Address address = 4;
}
message Address {
string address = 1;
string zip = 2;
}
Я создал эту функцию:
Код: Выделить всё
override suspend fun saveLastOrder(order: Order) {
try {
lastOrderStore.updateData { lastOrder ->
lastOrder.toBuilder().setOrder(order).build()
}
} catch (e: IOException) {
Log.e(TAG, "Save Last Order Exception: " + e.message)
}
}
У меня есть этот класс сериализатора:
Код: Выделить всё
object LastOrderSerializer : Serializer {
override val defaultValue: LastOrder
get() = LastOrder.getDefaultInstance()
override suspend fun readFrom(input: InputStream): LastOrder {
try {
return LastOrder.parseFrom(input)
} catch (exception: InvalidProtocolBufferException) {
throw CorruptionException("Cannot read proto.", exception)
}
}
override suspend fun writeTo(t: LastOrder, output: OutputStream) {
t.writeTo(output)
}
Я нашел пример с использованием строки, int... но никогда для сложного объекта.
Подробнее здесь: https://stackoverflow.com/questions/790 ... data-store
Мобильная версия