Android 在Firestore中添加/覆盖类型为array的字段
我想在集合中添加一个数组类型的字段 如果该字段不存在,请创建它。如果存在,则使用新数组值覆盖它 该字段应称为macAddress,其类型为字符串数组 我尝试了以下方法: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
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
的代码没有按预期的方式工作。您正在创建一个包含一个元素的列表,该元素本身就是一个数组。错误消息告诉您不能有这样的嵌套数组