2016-07-06 133 views
9

當我知道Firebase中以下結構中的「name」字段包含「efg」時,如何獲取密鑰「-KLpcURDV68BcbAvlPFy」。如何從firebase中的值獲取密鑰

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

我試過,但它返回 「俱樂部」

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

回答

12

那是因爲您使用的是ValueEventListener。如果查詢匹配多個子項,則返回所有這些子項的列表。即使只有一個匹配的孩子,它仍然是一個列表。由於您在該列表上調用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

感謝它的工作。 –