【问题标题】:How to get a single child from firebase database如何从firebase数据库中获取一个孩子
【发布时间】:2021-05-28 10:28:05
【问题描述】:

我检查了高低,但我看到的只是人们试图让所有孩子都进入列表和东西。我只想从数据库中获取一个孩子。


{
  "Haydn" : {
    "Users" : {
      "email" : "user@gmail.com",
      "name" : "kofi"
    }
  }
}

我想从结构中获取名称。

我的代码:

        rootNode = FirebaseDatabase.getInstance();
        reference = rootNode.getReference().child("Users");

        reference.addListenerForSingleValueEvent(
                new ValueEventListener() {
                    @Override
                    public void onDataChange(@NonNull DataSnapshot snapshot) {
                        if(snapshot.exists()){
                            String displayName = (String) snapshot.child("Haydn").child("Users").child("name").getValue();
                            loggedInUserTextView.setText(displayName);
                        }
                    }

                    @Override
                    public void onCancelled(@NonNull DatabaseError error) {

                    }
                }

【问题讨论】:

  • 1) 您能否在/Users 向我们展示实际的JSON,而不是显示示意图(作为文本,请不要截图)?您可以通过单击Firebase Database console 上溢出菜单 (⠇) 中的“导出 JSON”链接来获取此信息。 2)然后你能指出你想在loggedInUserTextView中显示这个JSON的什么值吗?
  • 用东西更新了它
  • 1) 你的问题中的"Haydn" 是什么意思,在 JSON 中代表什么? 2) 我强烈建议导出数据,而不是输入数据,因为AppName 通常也不属于导出的 JSON 的一部分(尽管它是数据库 URL 的一部分)。如果 JSON 中有敏感数据,则可以更改它。但是不要改变结构,因为没有看到实际的 JSON 就无法帮助您。
  • @Ashish 对于 Firebase 实时数据库,最好将结构包含为文本而不是图片。这样,如果我们需要在答案中使用它,它可以被复制和粘贴(所以我们不必重新输入 while 内容)。只要按照 Frank 在评论中提到的那样导出和粘贴数据,我们就可以开始了。
  • @Rabbid76 我现在转贴

标签: java android database firebase firebase-realtime-database


【解决方案1】:

您可以这样设置参考:

reference = rootNode.getReference().child("Users");

这意味着 Firebase 会从您的数据库中的 /Users 读取数据。由于您发布的 JSON 的根目录中没有 Users 节点,这意味着您获得的 snapshot 将是空的。


要读取单个节点,就像您在此处尝试做的那样,设置对该节点确切路径的引用:

reference = rootNode.getReference().child("Haydn/Users/name");

如您所见,您可以将整个路径传递给child(...) 中的节点。

有了这个参考,你可以像这样读取值:

reference.addListenerForSingleValueEvent(new ValueEventListener() {
    @Override
    public void onDataChange(@NonNull DataSnapshot snapshot) {
        if(snapshot.exists()){
            String displayName = snapshot.getValue(String.class);
            loggedInUserTextView.setText(displayName);
        }
    }

    @Override
    public void onCancelled(@NonNull DatabaseError error) {
        throw error.toException();
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多