【问题标题】:How to create an array from Firebase Data?如何从 Firebase 数据创建数组?
【发布时间】: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) {

                    }
                });

请指导我。 提前致谢。

【问题讨论】:

    标签: android arrays firebase firebase-realtime-database


    【解决方案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() 进行过滤。
    猜你喜欢
    • 2021-01-17
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    • 2019-05-03
    • 2015-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多