Android 在Firestore中添加/覆盖类型为array的字段

Android 在Firestore中添加/覆盖类型为array的字段,android,firebase,kotlin,google-cloud-firestore,Android,Firebase,Kotlin,Google Cloud Firestore,我想在集合中添加一个数组类型的字段 如果该字段不存在,请创建它。如果存在,则使用新数组值覆盖它 该字段应称为macAddress,其类型为字符串数组 我尝试了以下方法: val macInput = setting_mac_text.text.toString() val macArray = macInput.split(",") val macList = Arrays.asList(macArray) val dat

我想在集合中添加一个数组类型的字段

如果该字段不存在,请创建它。如果存在,则使用新数组值覆盖它

该字段应称为macAddress,其类型为字符串数组

我尝试了以下方法:

val macInput = setting_mac_text.text.toString()
            val macArray = macInput.split(",")
            val macList = Arrays.asList(macArray)
            val data =
                hashMapOf(Pair(FirebaseConstants.USER_MAC_ADDRESS, macArray))
            //save it in firebase
            db.collection(FirebaseConstants.ORGANIZATION)
                .document(orgID + ".${FirebaseConstants.USER_MAC_ADDRESS}")
                .set(FieldValue.arrayUnion(macList))
                .addOnCompleteListener { task ->
                    if (task.isSuccessful) {
                        Log.d(TAG, "successfully inserted")
                    } else {
                        Log.d(TAG, " failed ${task.exception}")
                    }
                }
还尝试像这样插入列表本身和哈希映射

val data = hashMapOf(Pair(FirebaseConstants.USER_MAC_ADDRESS, macArray))
db.collection(FirebaseConstants.ORGANIZATION)
                .document(orgID)
                .set(data))
但它总是给我
java.lang.IllegalArgumentException:无效数据。不支持嵌套数组


我做错了什么?

你做错了三件事:

  • FieldValue.arrayUnion()
    仅用作向该字段添加元素的字段值。在第一个示例中,您现在使用它的方式是将其作为文档的全部内容
  • 带有一个参数的
    set()
    仅用于创建或覆盖整个文档。它不能用于更新现有文档。如果需要更新,您必须传入SetOptions以告诉它合并。或者,您可以简单地使用
    update()
    修改现有文档
  • 处理
    macArray
    macList
    的代码没有按预期的方式工作。您正在创建一个包含一个元素的列表,该元素本身就是一个数组。错误消息告诉您不能有这样的嵌套数组
  • 我建议退一步,简化代码,删除所有与Firestore无关的活动部件。只需在Firestore中硬编码值,直到更新按您希望的方式工作,然后添加与实际值一起工作的代码。获得一件简单的工作,然后添加到它。如果出现错误,您将知道刚才添加的代码不正确