У меня проблемы со вставкой снимка из базы данных Firebase Realtime в класс данных в Kotlin с использованием ProGuard.
Вот как выглядят данные в консоли Firebase:
Вот как я смоделировал этот класс данных в моем приложении для Android:
data class PickupCode(
val code: String,
val boxId: String,
val orderId: String,
val suborderId: String,
val drawers: List<Int>,
val isDelivered: Boolean
) {
constructor(): this("", "", "","", emptyList(), false)
override fun toString(): String {
return code
}
}
Вот как я строю запрос к базе данных:
val reference = database.getReference("pickupCodes/$boxId/$code")
val listener = object : ValueEventListener {
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
println(snapshot)
val pickupCode = snapshot.getValue<PickupCode>(PickupCode::class.java)
pickupCode?.let {
println("Code: ${it.code}, is delivered: ${it.isDelivered} to drawers: ${it.drawers.toString()}")
if (!it.isDelivered) {
// No success
} else {
// Success!
}
} ?: run {
// No success
}
} else {
// No success
}
}
override fun onCancelled(error: DatabaseError) {
// No success
}
}
Это то, что печатает строка println(snapshot)
:
DataSnapshot {key = 320625, значение = {isDelivered = true, код = 320625, ящики = {0 = 2}, orderId = -LhdzXS4-gyT0ysNe-zi, suborderId = -LhdzYhT78y9b3iJcyrb, boxId} * 10_1
И это то, что следующий отпечаток на 3 строки позже печатает:
Код: 320625, поставляется: ложно для ящиков: [2]
Здесь я ожидал бы, что is delivered
будет true
, но по какой-то причине true
-значение isDelivered
из снимка игнорируется при анализе снимка в PickupCode
-классе. Значение isDelivered
для PickupCode
равно пустому конструктору класса.
Но ПОЧЕМУ и КАК это исправить?
Все остальные значения из моментального снимка анализируются корректно. Я новичок в Android, но у меня есть догадка, что в ProGuard (что бы это ни было) есть какая-то вина ... Вот как я это настроил:
-keepattributes Signature
-keepclassmembers class PickupCode.** {
*;
}