Я вижу, вы новичок в stackOverflow. Лучший способ опубликовать свой код - набрать его в самом вопросительном поле и нажать ctrl + k, выбрав часть кода.
В любом случае, из-за проблемы вы создаете анонимный (временный) запрос, когда вы call
databaseReferenceTagList.orderByChild("name").equalTo("AHA")
Ссылка в базе данных (которая физически существует в базе данных), такая как databaseReferenceTagList, может быть представлена запросом, поскольку DatabaseReference
наследуется от Query
. Поскольку он имеет физическое существование, его можно удалить. Но каждый запрос не обязательно должен иметь ссылку (физическое существование).
Разработанный вами запрос состоит из ссылок на теги с именем «AHA» (они физически существуют). Однако не существует исключительного физического существования для списка тегов, чье имя «AHA». Это всего лишь часть большого списка тегов (который, конечно, физически существует в базе данных).
Таким образом, нижняя строка -
- , вы можете удалить только эти элементы которые имеют физическое существование
- Объекты, имеющие физическое существование, - это те, которые имеют ссылки
- Все запросы не должны иметь ссылок. Только те, которые являются объектами DatabaseReference, имеют ссылку.
Теперь большая проблема в том, что даже если у запроса нет ссылки, у него есть данные и, следовательно, DataSnapShot. getRef()
его DataSnapshot возвращает ссылку на ближайший родительский элемент запроса, на который имеется ссылка.
Поэтому созданный (временный) запрос возвращает ссылку на список тегов, когда вы вызываете его datasnapshots 'getRef
.
И, следовательно, весь тэглист удаляется при вызове removeValue.
Решение состоит в том, чтобы вызывать removeValue только для ссылок, которые вы получаете из снимков данных фактических ссылок.
В вашем случае мы Знайте, что у каждого тега есть фактическое существование и мы можем вам это назвать removeValue
. Поэтому вместо вызова removeValue
для dataSnapshot,
for(DataSnapshot d:dataSnapshot.getChildren()){
d.getRef().removeValue();
}
Это приведет к индивидуальному удалению каждого дочернего (в данном случае только одного) запроса, а не самой ссылки (которая является ошибочной).
Пожалуйста, не стесняйтесь комментировать, если у вас есть какие-либо сомнения.