使用 Kotlin 的 Firebase Firestore toObject()
Firebase Firestore toObject() with Kotlin
我尝试在 Kotlin 项目中使用 Firebase Firestore。一切都很好,除非我想用 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(){}
}
有人可以告诉我我做错了什么吗?
谢谢
您忘记包含带参数的 public 构造函数,或者您也可以只使用带默认值的数据 class,这应该足够了:
data class MyObject(var foo: String = "")
在我的例子中,我得到了一个 NullPointerException,因为没有默认构造函数。
使用具有默认值的数据 class 修复了错误。
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()
}
我尝试在 Kotlin 项目中使用 Firebase Firestore。一切都很好,除非我想用 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(){}
}
有人可以告诉我我做错了什么吗?
谢谢
您忘记包含带参数的 public 构造函数,或者您也可以只使用带默认值的数据 class,这应该足够了:
data class MyObject(var foo: String = "")
在我的例子中,我得到了一个 NullPointerException,因为没有默认构造函数。 使用具有默认值的数据 class 修复了错误。
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()
}