如何从 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->r.getAmount()).collect(Collectors.toList()).toArray(String[]::new);
。
该死,我希望我第一次尝试就得到了魔法咒语。 :) 感谢您抓住亚历克斯。我更新了答案中的代码,但如果我仍然弄错了,请告诉我。
values() 是一种方法,stream() 没有任何参数。根据公共字段.map(r->r.amout)
或相应的getter .map(r->r.getAmount())
,应使用map() 进行过滤。以上是关于如何从 Firebase 数据创建数组?的主要内容,如果未能解决你的问题,请参考以下文章
从 Firebase 提取的数据中没有出现 UITableViewCells
无法从 Android 将数据发布到 Firebase 数据库