удаление определенного поста в базе данных (по почтовому узлу), но при этом удаляется вся database_table - PullRequest
0 голосов
/ 14 октября 2018

Я хочу удалить конкретный узел в таблице клиентов, используя идентификатор записи.

 btn.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
            Query applesQuery = ref.child("customers").orderByChild("post").equalTo(postid);
            applesQuery.getRef().removeValue();
            Toast.makeText(getContext(), "deleted", Toast.LENGTH_SHORT).show();

        }
    });

Но он удаляет всю базу данных.

Вот структура:

enter image description here

1 Ответ

0 голосов
/ 14 октября 2018

Причина, по которой все узлы удаляются, заключается в следующей строке:

applesQuery.getRef().removeValue();

Вызов Query.getRef() возвращает местоположение, в котором выполняется этот запрос.Поскольку applesQuery является запросом к post, applesQuery.getRef() возвращает сам узел post.Таким образом, applesQuery.getRef().removeValue() удаляет весь узел post.

В Firebase не существует понятия "запрос на удаление", куда вы отправляете DELETE FROM customer WHERE post = postid.Firebase может удалить узел только тогда, когда он знает его точный путь.Это означает, что вам нужно будет выполнить запрос, просмотреть его результаты и удалить каждый из них.

В коде:

DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
Query applesQuery = ref.child("customers").orderByChild("post").equalTo(postid);
applesQuery.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
            postSnapshot.getRef().removeValue()
        }
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        throw databaseError.toException();
    }
}

Обновление : я заметилчто значение свойства post совпадает со значением ключа клиента.Если это всегда так, вам не нужен запрос для удаления узла, и вы можете просто сделать:

ref.child("customers").child(postid).removeValue();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...