Dya*_*yan 2 android kotlin google-cloud-firestore
大家好,我正在尝试解析从 firestore 中的集合返回的对象
val user = userSnapshot.toObject(User::class.java)
Run Code Online (Sandbox Code Playgroud)
用户对象如下所示:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
奇怪的是所有字符串字段都有效,但没有布尔字段采用来自响应的值。老实说,我不知道为什么会发生这种情况,非常感谢任何帮助。
注意:无论如何,来自服务器的布尔值为 true,而对象为 false
问题是 kotlin 生成的 getter 和 setter 来访问布尔字段(或任何以前缀开头的字段)。当字段以“ is ”开头时,生成的 getter 和 setter 与字段不以is开头时生成的 getter 和 setter 不同。例如,您的字段isActive将有一个 settersetActive和一个 getter isActive(),这会混淆 firebase 中的序列化。
尝试添加它,@field:JvmField这样就不会生成那些 setter 和 getter。
@field:JvmField var isActive: Boolean = false,
@field:JvmField var isSuperUser: Boolean = false,
Run Code Online (Sandbox Code Playgroud)
您还可以将字段重命名为Activeand SuperUser(不带 is)。
| 归档时间: |
|
| 查看次数: |
437 次 |
| 最近记录: |