android - 解析来自 firestore 的响应不起作用

标签 android kotlin google-cloud-firestore

大家好,我正在尝试解析从 firestore 中的集合返回的对象

val user = userSnapshot.toObject(User::class.java)

用户对象如下所示:

data class User(var companyId: String = "",
                var email: String = "",
                var isActive: Boolean = false,
                var isSuperUser: Boolean = false,
                var superUserId: String = "",
                var userId: String = ""): Parcelable {

    constructor(parcel: Parcel) : this(
            parcel.readString(),
            parcel.readString(),
            parcel.readByte() != 0.toByte(),
            parcel.readByte() != 0.toByte(),
            parcel.readString(),
            parcel.readString()) {
    }

    override fun writeToParcel(parcel: Parcel, p1: Int) {
        parcel.writeString(companyId)
        parcel.writeString(email)
        parcel.writeByte(if (isActive) 1 else 0)
        parcel.writeByte(if (isSuperUser) 1 else 0)
        parcel.writeString(superUserId)
        parcel.writeString(userId)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<User> {
        override fun createFromParcel(parcel: Parcel): User {
            return User(parcel)
        }

        override fun newArray(size: Int): Array<User?> {
            return arrayOfNulls(size)
        }
    }
}

奇怪的是所有字符串字段都在工作,但没有一个 bool 字段采用来自响应的值。老实说,我不知道为什么会这样,非常感谢您的帮助。

注意:不管怎样,来自服务器的 bool 值都为真,对象为假

最佳答案

问题是 kotlin 生成的 getter 和 setter 用于访问 bool 字段(或任何以前缀 is 开头的字段)。 当字段以“is”开头时,生成的 getter 和 setter 与字段不以 is 开头的情况不同。 例如,您的字段 isActive 将有一个 setter setActive 和一个 getter isActive() 这会混淆 firebase 中的序列化。

尝试添加这个 @field:JvmField 这样就不会生成那些 setter 和 getter。

 @field:JvmField var isActive: Boolean = false,
 @field:JvmField var isSuperUser: Boolean = false,

您还可以将字段重命名为 ActiveSuperUser(不带 is)。

关于android - 解析来自 firestore 的响应不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49924049/

相关文章:

android - 使用图标而不是文本滑动 View

android - fragment - 获取 View 在调用 onCreateView 时已经有父错误

javascript - Firestore 中存储的 Date 对象的行为将会改变,您的应用可能会崩溃

javascript - 将 key 添加到 firestore 文档时出现问题

angular - 火存储 : How to update specific field of document?

android - 一个可绘制文件夹中的不同大小的图像(具有相同的名称)

android - EditText 的 setText() 在 onTextChanged 方法中不起作用

kotlin - 在 Kotlin DSL Gradle 上包含/排除标签 Junit5 的正确方法是什么

spring - Spring (Kotlin) 应用程序运行时的内存消耗行为

java - Kotlin 函数类型在运行时的 Java 类型是什么?