хотите удалить указанный c узел (deadlift) в базе данных firebased - PullRequest
0 голосов
/ 19 марта 2020

Я хочу удалить deadlift узел в name.

это моя база данных реального времени firebase

Я пробовал этот код:

Query queryRef = mReference.child("uid").child("exercise_name").orderByChild().equalTo("deadlift");
queryRef.addChildEventListener(new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot snapshot, String previousChild) {
      snapshot.getRef().setValue(null);
    }
});

Это не работает.

1 Ответ

0 голосов
/ 20 марта 2020

Таким образом, вы не можете удалить этот элемент, потому что вы используете неправильный запрос. Есть три основных проблемы с вашим запросом. Во-первых, вы передаете "uid" как строку, а не фактический uid, полученный в процессе аутентификации. Во-вторых, вам не хватает двух детей, то есть BACK и name. Третья проблема заключается в том, что вы ничего не передаете методу .orderByChild(). Таким образом, правильный запрос в данном случае должен выглядеть следующим образом:

String uid = FirebaseAuth.getInstance().getCurrentUser().getUid();
Query queryRef = mReference
    .child(uid) //The uid of the user
    .child("exercise_name")
    .child("BACK") //Was missing
    .child("name") //Was missing
    .orderByChild("-M2o26QvqcTmytlmact9") //The argument was missing
    .equalTo("deadlift");

Хотя вышеуказанный запрос будет работать, я предлагаю вам другую схему, которая поможет вам упростить запрос к базе данных:

Firebase-root
  |
  --- uid
       |
       --- BACK
            |
            --- name
                 |
                 --- deadlift: true

И это соответствующий запрос:

Query queryRef = mReference
    .child(uid)
    .child("exercise_name")
    .child("BACK")
    .child("name")
    .orderByChild("deadlift")
    .equalTo(true);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...