Может быть, с моим комментарием непонятно, поэтому я ставлю это как ответ, полный код, который не должен иметь проблему, с которой вы столкнулись, должен выглядеть примерно так:
usersQuery.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot ds: dataSnapshot.getChildren()) {
ds.getRef().removeValue().addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
Log.d(TAG, "Deleted");
}
});
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
Log.d(TAG, "onCancelled", databaseError.toException());
}
});
Это потому, что вы используете singleValueEventListener
. Если запрос соответствует нескольким дочерним элементам, он возвращает список всех этих дочерних элементов.
Даже если есть только один дочерний матч, это все равно список из одного. И так как вы звоните getRef()
в этом списке, вы получаете ключ от места, где вы выполнили запрос.