説明 -
DatabaseReference Ref;
//intialize Ref variable
Ref = FirebaseDatabase.getInstance().getReference(); //root reference
この後、valueEventListenerをRefに追加します
Ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (dataSnapshot.hasChild("abcd")) {
//abcd child is present
}else {
//abcd child is not present
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
具体的には、Firebaseが背後で使用しているアルゴリズムはdataSnapshot.hasChild("abcd")
どれですか?
Firebase-databaseで、ルート参照に多数の子が含まれている場合、これは効率的な使用方法ですか?
ADataSnapshot
は、FirebaseDatabaseの場所にあるデータの効率的に生成された不変のコピーです。変更することはできず、変更されることはありません。
hasChild(key)
以下のための便利な方法と考えることができますchild(key).exists()
。キーは常に一意であるため、特定のキーを見つけるためにスナップショット全体を繰り返す必要はありません。したがって、パフォーマンスはのHashMapにO(1)
似たものになるはずです。
ただし、大量のデータがある場合は、すべてを一度にダウンロードする必要がないことが多いため、クエリをフィルタリングまたは制限するか、より深いノードを選択して、一度にデータのサブセットのみを取得することをお勧めします。
たとえば、ツリーの下位でabcd
ノードを直接リッスンし、exists()
代わりにメソッドを使用して子ノードの存在を確認できます。
DatabaseReference ref = FirebaseDatabase.getInstance().getReference();
ref.child("abcd").addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
DataSnapshot child = dataSnapshot.child("efgh");
if (child.exists()) {
//efgh child is present
} else {
//efgh child is not present
}
}
@Override
public void onCancelled(DatabaseError databaseError) { }
});
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加