繁体   English   中英

DocumentSnapshot (Firestore) 到包含自定义对象列表的 Kotlin 对象

[英]DocumentSnapshot (Firestore) to Kotlin Object that contains a list of custom Object

我有一个对象User

@IgnoreExtraProperties
object User {
val firstName: String = ""
val lastName: String = ""
val employeeId: String = ""
val city: String = ""
val email: String = ""
var salaries = mutableListOf<Salary>()
}

和薪水看起来像这样:

@IgnoreExtraProperties
object Salary {
var employeeId: String? = ""
var value: Int? = 0
var startDate:Date = Date()
}

从 Firestore 检索用户数据时,我使用此代码从 Firestore 解析DocumentSnapshot

documentSnapshot.toObject(User::class.java)

除了“薪水清单”之外,一切都像它应该的那样工作。 列表的大小是正确的(在我的情况下是 3),但它是相同的元素 3 次而不是 3 个不同的元素 - 关于如何解决这个问题的任何想法......? :S

确切代码:

 fun getUser(): Observable<Boolean> {
    return Observable.create<Boolean> {
        FirebaseFirestore.getInstance().collection("users").document(FirebaseAuth.getInstance().currentUser!!.uid).addSnapshotListener(object : EventListener<DocumentSnapshot> {
            override fun onEvent(p0: DocumentSnapshot?, p1: FirebaseFirestoreException?) {
                if (p0!!.exists()) {
                     p0.toObject(User::class.java)
                    it.onNext(true)
                } else {
                }
            }
        }
        )
    }
}

数据库结构:

图片1 图片2

正如我在您的数据库中看到的, salaries属性不是一个列表,而是一个包含其他三个对象的array 当您使用mutableListOf<Salary>()将数据添加到 Cloud Firestore 数据库时,并不意味着数据将存储为列表,这意味着您将数据存储为数组,其中键是数字并且这些值是实际的Salary对象。 请注意, List不是 Cloud Firestore 中支持的数据类型

因此,要解决此问题,只需获取所需的用户文档,然后将salaries属性作为List 但请注意,即使salaries对象作为数组存储在数据库中,返回的对象也是ArrayList ,而不是array 现在只需遍历列表并获取所有这三个类型为Salary对象。 就是这样!

附注。 还要确保在您的数据库中将所有这三个工资对象作为不同的对象。 正如我在你的图片中看到的,前两个是相同的。

Firestore-root
   |
   --- salaries (collection)
         |
         --- userId (document)
               |
               --- userSalaries (collection)
                       |
                       --- salaryId (document)
                             |
                             --- //salary properties

正确的答案是 Salary 被声明为一个object而不是一个class (这就是为什么我的薪水列表中有多次相同的元素)所以object -> class

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM