source

Google Firebase 하위 항목이 있는지 확인

nicesource 2023. 7. 13. 20:55
반응형

Google Firebase 하위 항목이 있는지 확인

내 앱에서 파이어베이스에 있는 데이터베이스의 지정된 요소에 지정된 이름의 자식이 있는지 확인해야 합니다.저는 다음과 같은 방법을 사용하여 이 작업을 수행할 수 있기를 바랍니다.

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

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

제가 검색해봤지만, 유용한 것을 찾을 수 없었습니다.

편집 2. 위에 올릴 가치가 있습니다.저는 이것이 실제로 이 스냅샷에서 모든 데이터를 다운로드하는 것은 단지 데이터가 있는지 확인하기 위한 것이라는 것을 언급할 가치가 있다고 생각합니다.당신은 여기에 주의해야 합니다.참조가 방대한 경우(: 특정 하위/속성이 아닌 루트 참조), 존재 여부를 확인하는 데 사용할 수 있는 보다 심층적인 노드를 찾거나 효율적인 확인이 가능하도록 데이터 구조를 다르게 설계해야 합니다.

데이터베이스 참조는 사실상 해당 데이터의 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.

편집: 제가 원래 잘못된 함수 이름을 사용했습니다(hasChild 대신 childExists).

이런 식으로 하지 마.

절대.

모든 데이터를 사용하여 장치에 가져올 수 있습니다.

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

이 방법으로 확인하세요.존재하는 경우 자식 값을 반환하고, 그렇지 않으면 -> null입니다.

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
    }
  }
});

완전한 해결책.모든 데이터를 다운로드할 필요가 없습니다.다음과 같이 아이가 존재하는지 확인합니다.

// Assuming the names are in the name node. Remove "name/" if not
DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference("name/" + name);
rootRef.addListenerForSingleValueEvent(new ValueEventListener() {

    @Override
    public void onDataChange(DataSnapshot snapshot) {
         if (snapshot.exists()) {
             // Exist! Do whatever.

         } else {
             // Don't exist! Do something.

         }
    }

    @Override
    public void onCancelled(DatabaseError error) {
        // Failed, how to handle?

    }

});

사용해 보십시오..childexists와 결합하여.equalTo("Your specific name")

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) {

                                }
                            });

snapshot.exists()를 사용하여 참조된 데이터베이스 항목에 하위 값이 포함되어 있는지 확인합니다.

언급URL : https://stackoverflow.com/questions/37397205/google-firebase-check-if-child-exists

반응형