gpt4 book ai didi

android - Firebase Firestore toObject()不适用于数据类

转载 作者:行者123 更新时间:2023-12-02 12:26:48 30 4
gpt4 key购买 nike

我想从 firebase firestore 获取数据并使用数据类转换 toObject()。但它不起作用,因为对象已初始化但未设置字段。

这与 Firebase Firestore toObject() with Kotlin 非常相似.
但是我已经使用了使用数据类的建议答案,但它仍然无法正常工作。

数据类

data class DataClass(
var str : String = "default",
var int : Int = 0,
var bool: Boolean = false
)

备注:使用非数据类或更改 var 名称(在代码 数据库中)没有任何区别。

我实际上想使用更复杂的数据/对象,但剥离了其他所有内容以使其首先工作。

代码
val clusterRef = db.collection("cluster")
clusterRef.document("e8efpRf2FBPwByWqaIRe").get(Source.SERVER).addOnSuccessListener { documentSnapshot ->
Log.d(TAG, "${documentSnapshot.id} => ${documentSnapshot.data}")
val cluster = documentSnapshot.toObject(DataClass::class.java)
Log.d(TAG,"${cluster?.str} ${cluster?.int} ${cluster?.bool}")
Log.d(TAG, "object: $cluster")
}

日志猫
e8efpRf2FBPwByWqaIRe => {str=HelloWorld, bool=true, int=42}

W/Firestore: (21.3.0) [k]: No setter/field for str found on class c.d.a.c.a
W/Firestore: (21.3.0) [k]: No setter/field for bool found on class c.d.a.c.a
W/Firestore: (21.3.0) [k]: No setter/field for int found on class c.d.a.c.a

default 0 false
object: DataClass(str=default, int=0, bool=false)

数据库

Database

所以问题似乎是没有找到可用的 setter /字段,但是该字段在那里,例如 cluster.bool= false作品。 Kotlin Reference - data class 中没有提到显式的 setter 方法。我不能调用 setStr() as mentioned here .

我对 Android 开发和 Kotlin 比较陌生,并且怀疑一个非常基本的错误,即使花了几个小时浏览 SO 和引用资料,我也无法自行修复。

谢谢你。

最佳答案

我遇到了同样的错误消息(没有 setter/field ...)的类似问题,我通过在数据类中添加 get/set 注释解决了这个问题,即:

data class User(
@get: PropertyName("first_name") @set: PropertyName("first_name") var firstName: String = "",
@get: PropertyName("last_name") @set: PropertyName("last_name") var lastName: String = "",
@get: PropertyName("email") @set: PropertyName("email") var email: String = ""
)
然后转换成这样的对象:
val user: User? = documentSnapshot.toObject(User::class.java)

关于android - Firebase Firestore toObject()不适用于数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59120927/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com