如何从firebase数据库中获取一个孩子

Posted

技术标签:

【中文标题】如何从firebase数据库中获取一个孩子【英文标题】:How to get a single child from firebase database 【发布时间】: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 我现在转贴 【参考方案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();
    

【讨论】:

以上是关于如何从firebase数据库中获取一个孩子的主要内容,如果未能解决你的问题,请参考以下文章

如何从 Firebase android kotlin 获取所有具有特定价值的孩子?

如何从 uid Firebase 数据库中获取电子邮件地址?

从firebase数据库中获取添加的孩子,它冻结了用户界面

如何在firebase数据库中获取所有孩子的数据?

如何从 Firebase Realtime DB 读取孩子的值?

如何从 Firebase (Swift) 中删除一个孩子