2016-07-06 17 views
9

Firebaseの次の構造に "name"フィールドに "efg"が含まれていると、どのようにしてキー "-KLpcURDV68BcbAvlPFy"を取得できますか?ファイアベースの値からキーを取得する方法

clubs 
    -KLpcURDV68BcbAvlPFy 
     dept: "abc" 
     desc: "xyz" 
     name: "efg" 
    -asdasdasddsad 
     dept: "asda" 
     desc: "asd" 
     name: "adddd" 

私はこれを試してみましたが、それはあなたがValueEventListenerを使用しているためだ "クラブ"

mDatabase.child("clubs").orderByChild("name").equalTo("efg").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      String clubkey =dataSnapshot.getKey(); 

答えて

12

を返しました。クエリが複数の子にマッチする場合、それらのすべての子のリストを返します。ただ1つのマッチする子供があっても、それはまだ1つのリストです。そのリストにgetKey()と呼んでいるので、クエリを実行した場所のキーが得られます。

マッチの子供のキー、スナップショットの子供をループ取得するには:

mDatabase.child("clubs") 
     .orderByChild("name") 
     .equalTo("efg") 
     .addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { 
      String clubkey = childSnapshot.getKey(); 

をしかし、あなたはクラブの名前が一意であると仮定した場合、あなたは同様に彼らの下にクラブを保存するかもしれないことに注意してくださいクエリなしで正しい名前にアクセスしてください:

mDatabase.child("clubs") 
     .child("efg") 
     .addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
     String clubkey = dataSnapshot.getKey(); // will be efg 
+0

ありがとうございました。 –

関連する問題