将对象列表添加到我的Firestore集合

时间:2020-11-08 14:02:25

标签: android for-loop kotlin google-cloud-firestore

我有一个名为GroupMemberEntity的我的模型的列表。

我想将该列表设置到我的收藏集中,每个列表都使用UUID来获得自己的唯一ID。

我当前的实现如下-

suspend fun addGroupMembers(
        groupId: String,
        users: List<GroupMemberEntity>
    ) = suspendCoroutine<ResponseHandler.Resource<Any>> { continuation ->
        var insertCounter = 1
        users.forEach { entity ->
            FIRESTORE_DATABASE.collection(ACTIVITIES_COLLECTION)
                .document(UUID.randomUUID().toString())
                .set(entity)
                .addOnSuccessListener {
                    insertCounter++
                    if (insertCounter != users.size) return@addOnSuccessListener
                    continuation.resume(responseHandler.handleSuccess())

                }
                .addOnFailureListener { exception ->
                    continuation.resume(responseHandler.handleException(exception))
                }
        }
    }

我感觉可以通过不使用forEach循环来改善这一点,但是我不确定如何。一般来说,循环进行网络通话似乎是个坏主意。

任何建议都会有所帮助。

1 个答案:

答案 0 :(得分:1)

如果您希望每个实体都有自己的文档,则需要使用for-each方法:

suspend fun addGroupMember(groupId: String, user: List<GroupMemberEntity>) {
   users.forEach {
       FIRESTORE_DATABASE.collection(ACTIVITIES_COLLECTION)
                .document(UUID.randomUUID().toString())
                .set(entity)
                .await()
   }
}

另一种也许更简单的方法是将整个列表发布在一个文档中。您以后可以在该文档中检索或查询(我认为)特定字段。为此,我要在您的uuid中添加一个GroupMemberEntity。但是我不确定这是否行得通。