Подтвердить что ты не робот

Google firebase проверяет, существует ли ребенок

В моем приложении мне нужно проверить, есть ли у данного элемента моей базы данных на firebase дочерний элемент с заданным именем. Я надеялся, что это можно сделать, используя что-то вроде:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();

if (rootRef.childExists("name")) {
    //run some code
}

Я искал, но не мог найти ничего полезного.

4b9b3361

Ответ 1

Изменить 2; стоит поставить сверху: Я думаю, стоит упомянуть, что на самом деле это загрузка всех данных в этот снимок, чтобы проверить, существуют ли какие-либо данные. Вы должны помнить здесь. Если ссылка огромна (например, на самом деле корневая ссылка, а не конкретный тип child/property), вам следует либо найти более глубокий node, который вы можете использовать для проверки наличия или проектирования своей структуры данных по-разному, чтобы была эффективная проверка.

Ссылка на базу данных фактически является URL-адресом для этих данных. Вы хотите получить данные, чтобы узнать, существует ли ребенок. Вот почему метод, который вы, похоже, ищете, находится на DataSnapshot.

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.hasChild("name")) {
      // run some code
    }
  }
});

Теперь этот дизайн выглядит немного странным. Вы читаете всю базу данных, чтобы узнать, существует ли "имя". Вы можете сделать это немного более эффективным, слушая rootRef.child("name"), а затем просто проверяя, есть ли snapshot.exists().

Если вы пытаетесь сделать валидацию здесь, а не управлять потоком, вы должны рассмотреть возможность размещения этого кода в rules.json.

edit: я изначально использовал неправильное имя функции (childExists вместо hasChild)

Ответ 2

Попробуйте использовать .childexists в сочетании с .equalTo("Your specific name")

Ответ 3

UsersRef = FirebaseDatabase.getInstance().getReference();   
Users.addListenerForSingleValueEvent(new ValueEventListener() {
                                @Override
                                public void onDataChange(DataSnapshot snapshot) {
                                    if (snapshot.hasChild("childName")) {

                                        // it exists!
                                    }else{
                                       // does not exist
                                    }
                                }

                                @Override
                                public void onCancelled(@NonNull DatabaseError databaseError) {

                                }
                            });

Ответ 4

Не делай так

НИКОГДА

Он заберет все ваши данные и доставит на устройство

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.hasChild("name")) {
      // run some code
    }
  }
});

Проверьте это таким образом. Он вернет значение потомка, если существует, иначе → нуль

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();
rootRef.child("childName")
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {
  @Override
  void onDataChange(DataSnapshot snapshot) {
    if (snapshot.getValue() == null) {
      // The child doesn't exist
    }
  }
});

Ответ 5

Используйте snapshot.exists(), чтобы проверить, содержит ли указанная запись базы данных дочерний элемент, независимо от значения дочернего элемента.