簡體   English   中英

Firebase Firestore toObject() 不使用數據類

[英]Firebase Firestore toObject() not working with data class

我想從 firebase firestore 獲取數據並使用數據類轉換為 Object()。 但它不起作用,因為對象已初始化但未設置字段。

與 Kotlin 的 Firebase Firestore toObject()非常相似。 但是我已經使用了使用數據類的建議答案,但它仍然無法正常工作。

數據類

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)

數據庫

數據庫

所以問題似乎是No setter/field for available found ,但該字段在那里,例如cluster.bool= false有效。 Kotlin Reference - data class中沒有提到顯式 setter 方法,我無法調用setStr() ,如此處所述

我是 Android 開發和 Kotlin 的新手,懷疑是一個非常基本的錯誤,即使花了幾個小時瀏覽 SO 和參考文獻后我也無法自行修復。

謝謝你。

我遇到了具有相同錯誤消息的類似問題(沒有設置器/字段...),我通過在數據類中添加 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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM