Firebase Firestore toObject() с Котлином

Я пытаюсь использовать Firebase Firestore в проекте Kotlin. Все идет хорошо, за исключением случаев, когда я хочу создать экземпляр объекта с помощью DocumentSnapshot.toObject(Class valueType).

Вот код:

FirebaseFirestore
    .getInstance()
    .collection("myObjects")
    .addSnapshotListener(this,
    { querySnapshot: QuerySnapshot?, e: FirebaseFirestoreException? ->

        for (document in querySnapshot.documents) {

            val myObject = document.toObject(MyObject::class.java)

            Log.e(TAG,document.data.get("foo")) // Print : "foo"
            Log.e(TAG, myObject.foo) // Print : ""
        }
    }
})

Как вы можете видеть, когда я использую documentChange.document.toObject(MyObject::class.java), мой объект создается, но внутренние поля не заданы. Я знаю, что Firestore нуждается в модели, чтобы иметь пустой конструктор. Итак, вот модель:

class MyObject {

    var foo: String = ""

    constructor(){}

}

Может кто-нибудь сказать мне, что я делаю неправильно?

Спасибо

Ответ 1

Вы забыли включить публичный конструктор с аргументами, или вы также можете просто использовать класс данных со значениями по умолчанию, этого должно быть достаточно:

data class MyObject(var foo: String = "")

Ответ 2

В моем случае я получал NullPointerException, потому что не было конструктора по умолчанию. При использовании класса данных со значениями по умолчанию исправлена ​​ошибка.

data class Message(
        val messageId : String = "",
        val userId : String = "",
        val userName : String = "",
        val text : String = "",
        val imageUrl : String? = null,
        val date : String = ""
)

Ответ 3

class MyObject {

    lateinit var foo: String

    constructor(foo:String) {
        this.foo = foo
    }

    constructor()

}