【问题标题】:Extracting Individual Values From Firebase DataSnapshot从 Firebase DataSnapshot 中提取单个值
【发布时间】:2016-09-29 00:55:54
【问题描述】:

我正在使用 addListenerForSingleValueEvent 从 Firebase 数据库中检索数据,我得到如下内容:

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

从这个数据快照中,我如何提取食物值的关键字符串(即 -key、-key2 和 -key3)以单独保存在一个数组中,如 array{-key1, -key2, -key3}

【问题讨论】:

  • 这看起来像一个典型的 for loop 数组情况,而不是 firebase 或 firebase 数据库。

标签: android firebase firebase-realtime-database


【解决方案1】:

如果您已经有快照,您可以使用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
    }
}

【讨论】:

  • 在您碰巧还有一层孩子的情况下(即总共 3 层)。 两个嵌套的 for 循环到达最终层的效果如何? 或者您是否建议避免一起遇到这种情况?对于小型数据库而言,这可能不是什么大问题,但是当儿童数量达到数千或数百万时,情况会怎样。
  • 当您将侦听器附加到某个位置时,该位置下的所有数据都会下载到客户端并在快照中可用。所以循环是本地操作。我认为这可能也回答了您的第二个问题:不要下载大型节点。在 Firebase 中:仅读取/同步您向用户显示的数据。
  • 太棒了!谢谢回复。真的很有帮助。
猜你喜欢
  • 2018-11-30
  • 2015-12-29
  • 2021-10-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多