2016-09-28 59 views
2

我使用addListenerForSingleValueEvent檢索從火力地堡數據庫中的數據,我也得到類似如下:提取單個數值從火力地堡DataSnapshot

DataSnapshot { key = Food, value = {-key1=true, -key2=true, -key3=true} } 

從這個datasnopshot,我怎麼能提取食用價值的關鍵字符串(即-key,-key2和-key3)單獨保存在一個數組中,如array{-key1, -key2, -key3}

+0

這看起來像一個典型的'與陣列loop'情況比使用firebase或firebase數據庫。 – Rexford

回答

2

如果你已經有了一個快照,你可以解決孩子child()

public void onDataChange(DataSnapshot snapshot) { 
    System.out.println(snapshot.getKey()); // Food 
    System.out.println(snapshot.child("-key1").getValue()); // true 
} 

你也可以遍歷所有的孩子:

public void onDataChange(DataSnapshot snapshot) { 
    for (DataSnapshot child: snapshot.getChildren()) { 
     System.out.println(child.getKey()); // "-key1", "-key2", etc 
     System.out.println(child.getValue()); // true, true, etc 
    } 
} 
+0

在恰好有一層兒童(即共3層)的情況下。 **兩個嵌套for循環到達最終層的效果如何?**或者您是否建議避免一起進入這種情況?對於一個小型數據庫來說,這可能不是那麼大的問題**但是當孩子數到數千或數百萬時,情況如何** –

+1

當您將偵聽器附加到某個位置時,該位置下的所有數據都會下載到客戶端,在快照中可用。所以循環是本地操作。我想這可能也會回答你的第二個問題:不要下載大型節點。在Firebase中:只能讀取/同步您向用戶展示的數據。 –

+0

太棒了!謝謝回覆。這真的很有幫助。 –