首页 > 解决方案 > Android:如何在 Firestore 中编写字符串数组列表

问题描述

我需要编写一个简单的集合,其中文档只包含一个字符串数组列表。

usersBlocked
    -blockerID
         - usersBlockedList
               -userID1
               -....
               -userIDN

此时,如果文档已经以这种方式存在,我可以更新列表:(为了测试 porpouses,我手动编写了它)。

val reference = Firebase.firestore
            .collection("usersBlocked")
            .document(userIDBlocker)

reference.update("usersBlocked", FieldValue.arrayUnion(userIDToBlock))
            .addOnSuccessListener { Logger.d("Blocked") }
            .addOnFailureListener { Logger.d(it.localizedMessage) }

正如我所说,如果文档存在,则更新是正确的,但是当没有文档时...我收到此错误:

NOT_FOUND: No document to update: projects/xxxxxx/databases/(default)/documents/usersBlocked/2oLOYbG2z9gRC5VugchEP7ZPpy53

我认为显然不存在,但我不知道如何在文档中编写数组。

我看到了如何保存地图,但不是我需要的。

数据库结构:

在此处输入图像描述

标签: androidfirebasekotlingoogle-cloud-firestore

解决方案


首先,您必须确认您当前的userid. 像我放的那样放条件。它将检查 id 是否可用。如果 id 不可用。然后它将在您的 usersBlocked 处生成新文档,其中包含 uid 和存储数组。

val reference = Firebase.firestore
    .collection("usersBlocked")
    .document(userIDBlocker).get()
        .addOnSuccessListener { documentSnapshot ->
            if (documentSnapshot.exists()) {
                reference.update("usersBlocked", FieldValue.arrayUnion(userIDToBlock))
            } else {
                val userdetail = HashMap<String, Any>()
                var usersBlockedList = arrayListOf<String>()
                usersBlockedList.add(userIDToBlock)
                userdetail["usersBlocked"] = usersBlockedList
                Firebase.firestore.collection("usersBlocked").document(userIDBlocker).set(userdetail)
                        .addOnSuccessListener { success ->

                        }
                        .addOnFailureListener { exception ->
                            Log.e("Data Failed", "To added because ${exception}")
                        }

            }
        }
        .addOnFailureListener { exception ->
        Log.e("Exception", "${exception}")
        }

推荐阅读