如何从 Firebase 数据创建数组?

Posted

技术标签:

【中文标题】如何从 Firebase 数据创建数组?【英文标题】:How to create an array from Firebase Data? 【发布时间】:2021-11-23 22:40:49 【问题描述】:

我正在做一个项目,我需要一个包含来自 Google Firebase 数据的元素的数组。 我在 Firebase 中存储了一些会员计划的详细信息,如下所示:

"plans" : 
"3 Months Plan" : 
  "amount" : "1200",
  "planName" : "3 Months Plan",
  "savings" : "66",
  "validityInDays" : "90"
,
"6 Months Plan" : 
  "amount" : "1800",
  "planName" : "6 Months Plan",
  "savings" : "33",
  "validityInDays" : "180"
,
"Monthly" : 
  "amount" : "500",
  "planName" : "Monthly",
  "savings" : "99",
  "validityInDays" : "360"

这里我想要一个包含类似元素的数组

String [] planNames = "Monthly","3 Months Plan","6 Months Plan";

即按顺序排列的所有计划名称的数组

以及所有计划金额的数组,其顺序与上述数组相同。即

String [] planAmount = "500","1200","1800";

我们可以从以下获取“计划”的DataSnapshot:

database.getReference()
                .child("plans")
                .addValueEventListener(new ValueEventListener() 
                    @Override
                    public void onDataChange(@NonNull  DataSnapshot snapshot) 
                    String [] planNames= //NEED HELP HERE
                    String [] planAmounts= //NEED HELP HERE
                   

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) 

                    
                );

请指导我。 提前致谢。

【问题讨论】:

【参考方案1】:

在您的onDataChange 中,snapshot.getValue() 将为您提供Map<String,Object>plans 数据。

所以我们先从快照中获取数据:

Map<String,Object> map = (Map<String,Object>) snapshot.getValue();

现在您可以为您的计划名称获取该地图的键:

String [] planNames = map.keySet().toArray();

然后选择每个键的数量:

String[] planAmounts = map.values.stream(r->r["amount"]).collect(Collectors.toList()).toArray(String[]::new);

【讨论】:

嘿噗。从流中收集元素时,返回的对象是一个List,所以需要转换String[] planAmounts = map.values().stream().map(r-&gt;r.getAmount()).collect(Collectors.toList()).toArray(String[]::new); 该死,我希望我第一次尝试就得到了魔法咒语。 :) 感谢您抓住亚历克斯。我更新了答案中的代码,但如果我仍然弄错了,请告诉我。 values() 是一种方法,stream() 没有任何参数。根据公共字段.map(r-&gt;r.amout) 或相应的getter .map(r-&gt;r.getAmount()),应使用map() 进行过滤。

以上是关于如何从 Firebase 数据创建数组?的主要内容,如果未能解决你的问题,请参考以下文章

从 Firebase 提取的数据中没有出现 UITableViewCells

无法从 Android 将数据发布到 Firebase 数据库

如何在使用firebase作为服务器或数据库的cordova应用程序中实现通知

如何导出所有 Firebase 远程配置键和值?

角度 4 - 从 firebase 动态读取数组

VS 代码中 Firebase 的代码完成?