2016-09-28 60 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

太棒了!谢谢回复。这真的很有帮助。 –