【问题标题】:Retrieving child's Information from Firebase back to android studio将孩子的信息从 Firebase 检索回 android studio
【发布时间】:2016-10-25 15:21:19
【问题描述】:

我是 Android Studio 和 Firebase 本身的新手。我知道为了从孩子的唯一 ID 中获取孩子的数据,我可能需要使用数据快照方法。例如,我需要将 name 从 Firebase 数据库检索回 android studio 应用程序。在这种情况下如何实现它?帮助将不胜感激!

{
  "0Zs7aiWplRRJ5IJ5pazuUOxIdqz2" : {

    "name" : "yeo",
    "pos" : "intern",
    "team" : "nwrs"
  },
  "kaLCjJFoGETWCWH42kNkc90b5Ku1" : {

    "2016" : {
      "9" : {
    "25" : {
      ".priority" : 0.0,
      "AM" : "",
      "OT" : "",
      "OVN" : "",
      "PM" : "",
      "TPT" : ""
    }
      },
      "10" : {
    "1" : {
      ".priority" : 0.0,
      "AM" : "zxc11",
      "OT" : "12",
      "OVN" : "33",
      "PM" : "222",
      "TPT" : "54"
    },
    "26" : {
      "AM" : "aa",
      "OVN" : "gg",
      "PM" : "ccc",
      "TPT" : ""
    },
    "29" : {
      ".priority" : 0.0,
      "AM" : "dd",
      "OVN" : "aa",
      "PM" : "ss",
      "TPT" : "2fd"
    }
      }
    },
    "name" : "Jing Yang",
    "pos" : "Intern",
    "team" : "NWRS"
  }
}

下面是我当前的代码

    root.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            Set<String> set = new HashSet<String>();
            Iterator i = dataSnapshot.getChildren().iterator();

            while (i.hasNext()){
                set.add(((DataSnapshot)i.next()).getKey());

            }
            names.clear();
            names.addAll(set);

            arrayAdapter.notifyDataSetChanged();

【问题讨论】:

  • 您在问题中包含了 JSON 树的图片。请将其替换为实际的 JSON 作为文本,您可以通过单击 Firebase 数据库控制台中的导出按钮轻松获取该文本。将 JSON 作为文本使其可搜索,让我们可以轻松地使用它来测试您的实际数据并在我们的答案中使用它,一般来说这只是一件好事。

标签: android firebase firebase-realtime-database


【解决方案1】:

我假设root 指的是您的数据库的根。在这种情况下,您的onDataChange 将获得该位置的全部数据的快照。您可以遍历它们并依次获取每个孩子的属性:

root.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Set<String> set = new HashSet<String>();
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            //set.add(childSnapshot.getKey());
            set.add(childSnapshot.child("name").getValue(String.class));
        }
        names.clear();
        names.addAll(set);

        arrayAdapter.notifyDataSetChanged();

但我强烈建议您创建一个 Java 类来表示列表中的项目。在您的情况下,这可以很简单:

public class Item {
    public string name;
    public string pos;
    public string team;
}

然后你可以阅读这些项目:

root.addValueEventListener(new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {
        Set<String> set = new HashSet<String>();
        for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) {
            Item child = childSnapshot.getValue(Item.class);
            set.add(item.name);
        }
        names.clear();
        names.addAll(set);

        arrayAdapter.notifyDataSetChanged();

【讨论】:

  • 如果我要在 2016 年获得包含月份的嵌套子项,我会这样输入吗?
  • set.add(childSnapshot.child("year").child("month").getValue(String.class));
猜你喜欢
  • 2021-03-11
  • 2017-08-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-03
  • 1970-01-01
  • 1970-01-01
  • 2021-11-17
相关资源
最近更新 更多