Ответ 1
Вы забыли включить публичный конструктор с аргументами, или вы также можете просто использовать класс данных со значениями по умолчанию, этого должно быть достаточно:
data class MyObject(var foo: String = "")
Я пытаюсь использовать 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(){}
}
Может кто-нибудь сказать мне, что я делаю неправильно?
Спасибо
Вы забыли включить публичный конструктор с аргументами, или вы также можете просто использовать класс данных со значениями по умолчанию, этого должно быть достаточно:
data class MyObject(var foo: String = "")
В моем случае я получал NullPointerException, потому что не было конструктора по умолчанию. При использовании класса данных со значениями по умолчанию исправлена ошибка.
data class Message(
val messageId : String = "",
val userId : String = "",
val userName : String = "",
val text : String = "",
val imageUrl : String? = null,
val date : String = ""
)
class MyObject {
lateinit var foo: String
constructor(foo:String) {
this.foo = foo
}
constructor()
}