gpt4 book ai didi

android - 将 Firebase 数据快照反序列化为 Kotlin 数据类

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:40:30 26 4
gpt4 key购买 nike

您好,我有一个如下所示的 Kotlin 数据类

data class User (
@get:Exclude val gUser: Boolean,
@get:Exclude val uid: String,
@get:PropertyName("display_name") val displayName: String,
@get:PropertyName("email") val email: String,
@get:PropertyName("account_picture_url") val accountPicUrl: String,
@get:PropertyName("provider") val provider: String
)

我能够毫无问题地序列化对象。但是我在进行 firebase 查询时无法反序列化对象。目前这就是我正在做的获取数据的工作

_firebaseReference.child(getString(R.string.firebase_users_key)).child(user.uid)
.setValue(user).addOnCompleteListener{
_firebaseReference.child("users").child(user.uid)
.addListenerForSingleValueEvent(object : ValueEventListener {
override fun onCancelled(p0: DatabaseError) {

}

override fun onDataChange(p0: DataSnapshot) {
if (p0.exists()) {
val userHash = p0.value as HashMap<*, *>
var currentUser: User
if (userHash[getString(R.string.provider_key)]
!= getString(R.string.provider_google)) {
currentUser = User(false, p0.key!!,
userHash["display_name"].toString(),
userHash["email"].toString(),
userHash["account_picture_url"].toString(),
userHash["provider"].toString())
} else {
currentUser = User(true, p0.key!!,
userHash["display_name"].toString(),
userHash["email"].toString(),
userHash["account_picture_url"].toString(),
userHash["provider"].toString())
}
}
}

})
}

这只是一个测试项目,我正在努力练习我的 Kotlin,但这是我想弄清楚的事情。

如果我做的完全错了请告诉我,任何建议将不胜感激

谢谢

最佳答案

Firebase 需要一个空构造函数才能反序列化对象:

data class User(
@Exclude val gUser: Boolean,
@Exclude val uid: String,
@PropertyName("display_name") val displayName: String,
@PropertyName("email") val email: String,
@PropertyName("account_picture_url") val accountPicUrl: String,
@PropertyName("provider") val provider: String
) {
constructor() : this(false, "", "", "", "", "")
}

您可以像这样声明它并提供一些默认值以便能够调用主构造函数,或者您可以为所有参数声明默认值:

data class User (
@Exclude val gUser: Boolean = false,
@Exclude val uid: String = "",
@PropertyName("display_name") val displayName: String = "",
@PropertyName("email") val email: String = "",
@PropertyName("account_picture_url") val accountPicUrl: String = "",
@PropertyName("provider") val provider: String = ""
)

然后将为您创建各种构造函数,包括一个空构造函数。

如果序列化出现问题,可能是因为 ide 生成的 getter 和 setter,请尝试使用 @get 和 @set 注释加强它们:

data class User (
@Exclude val gUser: Boolean = false,
@Exclude val uid: String = "",
@set:PropertyName("display_name")
@get:PropertyName("display_name")
var displayName: String = "",
@PropertyName("email") val email: String = "",
@set:PropertyName("account_picture_url")
@get:PropertyName("account_picture_url")
var accountPicUrl: String = "",
@PropertyName("provider") val provider: String = ""
)

关于android - 将 Firebase 数据快照反序列化为 Kotlin 数据类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50723051/

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