Я запускаю приложение для Android, которое использует Google Cloud Firestore. Но когда я пытаюсь удалить что-то из firestore, оно не исчезает.
Вот изображение Cloud Firestore:
И вот мой код для удаления элемента массива:
fun updateData(userId: String, values: Map<String, Any>) =
db.collection("lotoup").document("loter").update(values)
И вот мой код, который вызывает функцию:
var document = task.getResult()
var group = document?.get("lotarray") as List<String>
val group_array: Array<String>
Log.d("myTag", group.toString())
val lotnumber = group.random().toString()
lotnum.text = lotnumber
updateData("Alexander", mapOf("lotarray.${group.indexOf(lotnumber)}" to FieldValue.delete()))
А это БД:
val db: FirebaseFirestore = FirebaseFirestore.getInstance()
Да. Я попытался подключить прослушиватель. Все в порядке.
Я почти уверен, что FieldValue.delete() удаляет все поле, а НЕ запись в поле массива.
Хорошо. Но в таком случае как?
Для обновления элементов массива есть специальные методы FieldValue
: arrayUnion()
и arrayRemove()
. Хороший пример есть в документации Firebase , а вот ссылка.
У меня нет игровой площадки, чтобы попытаться исправить ваш код, но вы обязательно должны использовать arrayRemove()
для удаления поля массива. Я думаю, что следующее должно работать:
document.getReference().update( "lotarray", FieldValue.arrayRemove(lotnumber) )
Судя по тому, как он используется с get()
, я предполагаю, что document
— это DocumentSnapshot, и, поскольку я не могу это проверить, пожалуйста, относитесь к нему как к псевдокоду.
Вы пытались прикрепить прослушиватель, чтобы увидеть, если что-то не так?