2017-10-05 32 views
0

我有一個火力地堡數據庫,看起來是這樣的:如何檢索未知孩子中未知密鑰的值?

enter image description here

Entries的孩子將有在每個那些孩子們也會有不同的未知名的各種未知的名稱和鍵/值。我想檢索所有的孩子的名字和關鍵的名字,但不知道如何雙擊循環通過DataSnapshot。這就是我一直在玩至今:

mDatabase = FirebaseDatabase.getInstance().getReference(); 
    mDatabase.child("Entries").addListenerForSingleValueEvent(new ValueEventListener() { 
     @Override 
     public void onDataChange(DataSnapshot dataSnapshot) { 
      for (DataSnapshot entries : dataSnapshot.getChildren()) { 
       for (Map<String, String> entry : entries.getValue().entrySet()){ 
        Map singlePair = (Map) entry.getValue(); 

我知道最後兩行是一個爛攤子,但我不知道如何找回孩子的內容?任何幫助將非常感激。

+0

它看起來不那麼亂。它工作嗎? –

+0

不,對'entrySet'的調用對於一件事是無效的,但我不知道如何嘗試或調用什麼? – MisterWeary

回答

2

我個人更喜歡堅持DataSnapshot類更長,給他們更多的語義名稱。例如:

mDatabase = FirebaseDatabase.getInstance().getReference(); 
mDatabase.child("Entries").addListenerForSingleValueEvent(new ValueEventListener() { 
    @Override 
    public void onDataChange(DataSnapshot dataSnapshot) { 
    for (DataSnapshot entrySnapshot : dataSnapshot.getChildren()) { 
     for (DataSnapshot propertySnapshot : entrySnapshot.getChildren()) { 
     System.out.println(propertySnapshot.getKey()+": "+propertySnapshot.getValue(String.class)); 
     } 
    } 
    } 
    ... 
+0

這是完美的。謝謝。 – MisterWeary

1

請參考下面的代碼。

FirebaseDatabase database = FirebaseDatabase.getInstance(); 
    database.getReference() 
      .child("Entries") 
      .addListenerForSingleValueEvent(new ValueEventListener() { 
       @Override 
       public void onDataChange(DataSnapshot dataSnapshot) { 
        for (DataSnapshot snapshot : dataSnapshot.getChildren()){ 

         System.out.println(snapshot.getKey()); // home wifi, work computer, ... 
         Map<String, Object> map =(Map<String, Object>) snapshot.getValue(); 

         for (Map.Entry<String, Object> entry : map.entrySet()){ 

          System.out.println(entry.getKey()); // network name 
          System.out.println(entry.getValue().toString()); // password 

         } 



        } 
       } 

       @Override 
       public void onCancelled(DatabaseError databaseError) { 

       } 
      }); 
+0

這可行,但弗蘭克的解決方案是我理解的更好。乾杯。 – MisterWeary