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
'source' 카테고리의 다른 글
MongoDB 복제에 'arbitter'가 필요한 이유는 무엇입니까? (0) | 2023.07.13 |
---|---|
엑셀의 새 줄 바꿈 문자 코드는 무엇입니까? (0) | 2023.07.13 |
Rprofile에서 .libPaths를 사용하여 R 기본 라이브러리 경로를 변경합니다.사이트가 작동하지 않음 (0) | 2023.07.13 |
WordPress 사이트에서 주문을 처리하도록 Woocommerce 체크아웃을 변경하시겠습니까? (0) | 2023.07.13 |
IIS 오류, 웹 서버에서 디버깅을 시작할 수 없습니다. (0) | 2023.07.13 |