When pulling data from Firestore, I use .toObject()
to map the data received into my data class, which is:
data class Img(var event_uid: String = "", var isVip: Boolean = false , var nombre: String = "", var url: String = "")
However, the mapping is not doing well. I received the field isVip=>true
in the task, but the object field is mapped as false (default value).
What am I doing wrong?
EDIT:
I see in Logcat
W/Firestore: (0.6.6-dev) [zzevb]: No setter/field for isVip found on class ***.model.Img
According to Kotlin Docu:
If the name of the property starts with is, a different name mapping
rule is used: the name of the getter will be the same as the property
name, and the name of the setter will be obtained by replacing is with
set. For example, for a property isOpen
, the getter will be called
isOpen()
and the setter will be called setOpen()
. This rule applies
for properties of any type, not just Boolean
.
Maybe a Firestore with Kotlin issue?
Try adding @field:JvmField
to isValid
boolean property.
If you are using in your model class a field named isVip
which is of type Boolean
, when instantiating an object of your Img
class using the following line of code:
val img = Img("Y9X ... zYn", true, "Nombre", "https://...")
The way in which your isVip
property will look like in your database will be simply: vip
and not isVip
as you probably expected. The resason that your isVip
property is stored as isVip
and not just vip
is because you didn't add your data in the database using your helper class but somehow manually.
The reason you have that warning is because you have in your database a field which has no correspondent in your model class. In your model class you have a field named isVip
which should have in the database a correspondent field named vip
and not isVip
, as it is now. So Firestore cannot create a connection between those fields and that's why you have that warning.
To solve this, you can remove (if is possible) the old data from your database and add fresh data using your model class. You need to have the name of your property in your model class named isVip
and in your database just only vip
.
Or you can change the name of your property in your modelc class from isVip
to simply vip
and that's it.