FireObase Firestore toObject завершается ошибкой при сопоставлении логического свойства - PullRequest
0 голосов
/ 12 сентября 2018

При извлечении данных из Firestore я использую .toObject(), чтобы отобразить полученные данные в мой класс данных, а именно:

data class Img(var event_uid: String = "", var isVip: Boolean = false , var nombre: String = "", var url: String = "")

Однако отображение не очень хорошо. Я получил поле isVip=>true в задаче, но поле объекта отображается как ложное (значение по умолчанию).

snapshot data

list of mapped object

Что я делаю не так?

EDIT: Я вижу в Logcat

W/Firestore: (0.6.6-dev) [zzevb]: No setter/field for isVip found on class ***.model.Img

Согласно Kotlin Docu :

Если имя свойства начинается с is, сопоставление другого имени используется правило: имя получателя будет таким же, как и у свойства имя, и имя сеттера будет получено путем замены на задавать. Например, для свойства isOpen получатель будет называться isOpen() и сеттер будет называться setOpen(). Это правило применяется для свойств любого типа, а не только Boolean.

Может быть, Firestore с проблемой Kotlin?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

Если вы используете в своем классе модели поле с именем isVip, имеющее тип Boolean, при создании экземпляра объекта вашего класса Img с использованием следующей строки кода:

val img = Img("Y9X ... zYn", true, "Nombre", "https://...")

То, как ваше свойство isVip будет выглядеть в вашей базе данных, будет просто: vip, а не isVip, как вы, вероятно, ожидали. Причина, по которой ваше свойство isVip хранится как isVip, а не просто vip, заключается в том, что вы не добавили свои данные в базу данных с помощью своего вспомогательного класса, а каким-то образом вручную.

Причина, по которой вы получаете это предупреждение, состоит в том, что в вашей базе данных есть поле, в котором нет корреспондента в вашем классе моделей. В вашем классе модели у вас есть поле с именем isVip, которое должно иметь в базе данных соответствующее поле с именами vip и , а не isVip, как сейчас. Поэтому Firestore не может создать связь между этими полями, и поэтому у вас есть это предупреждение.

Чтобы решить эту проблему, вы можете удалить (если это возможно) старые данные из вашей базы данных и добавить свежие данные, используя класс вашей модели. Вам необходимо иметь имя вашего свойства в классе вашей модели с именем isVip, а в вашей базе данных только vip.

Или вы можете изменить имя вашей собственности в классе моделиc с isVip на просто vip и все.

0 голосов
/ 12 сентября 2018

Попробуйте добавить @field:JvmField к isValid логическому свойству.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...