当前位置: 首页 > 知识库问答 >
问题:

如何查询firebase数据库返回一个值的键的父的父?

隗新霁
2023-03-14

我正在开发一个团队聊天应用程序。我在Firebase里存储聊天数据。

  • 聊天存储在名为chats的节点下。
  • chats的每个直接子组都是一个团队的名称(如WhatsApp...chat groups)。
  • 团队节点包含所有聊天消息。聊天消息已存储
  • 父节点的格式为timestamp_chat

我的问题

  reference1 = FirebaseDatabase.getInstance().getReference().child("chats");

    Query chatQuery = reference1.orderByChild("from").equalTo("ragesh");
    System.out.println("Chat list :: starting");

    chatQuery.addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            System.out.println("Chat list :: onChildAdded");

            for (DataSnapshot chat : dataSnapshot.getChildren()) {

                HashMap<String, Object> hashMap = (HashMap<String, Object>) dataSnapshot.getValue();
                System.out.println("Chat list :: The chat group is =>" + dataSnapshot.getKey());
                System.out.println("Chat list :: The key & Value => " + chat.getKey() +" :: "+chat.getValue().toString());

            }
        }

        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {

        }

        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {

        }

        @Override
        public void onCancelled(DatabaseError databaseError) {
            Toast.makeText(ChatListActivity.this, "Connection Error "+databaseError.getDetails(), Toast.LENGTH_SHORT).show();
            System.out.println("Chat list :: databaseError "+databaseError.toString());


        }
    }); 

遗憾的是,上面的代码没有返回任何值。甚至没有调用
system.out.println(“Chat list::OnChildAdded”);。而且它也不调用oncanceled。(所以,没有错误)。

我被这个吓坏了。请帮帮我.

共有1个答案

吕承望
2023-03-14

获取用户名:

mRootRef.child("chats").child("teamrova").orderByChild("from").equalTo("ragesh").addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
   for(DataSnapshot datas: dataSnapshot.getChildren()){
     String name=datas.child("from").getValue().toString();



}

@Override
public void onCancelled(DatabaseError databaseError) {

   }
});

由于您使用的是AddChildEventListener,所以您不需要for循环来获取那些值for(DataSnapshot chat:DataSnapshot.getchildren()){

您还需要更改以下内容:

 reference1 = FirebaseDatabase.getInstance().getReference().child("chats");
reference1 = FirebaseDatabase.getInstance().getReference().child("chats").child("teamrova");
 类似资料:
  • 我正在尝试在Firebase中进行简单搜索以从我的Firebase数据中返回数据,但没有任何返回。 JSON结构 我的Firebase搜索代码如下 但一旦代码被执行,它就会返回null。还有一种方法可以搜索特定字段。

  • 我想做的是用同一个键查询Firebase中的两个值。我的数据库是这样的: 我在我的Android项目中编写了一个查询来检索具有相同语言的所有文档,并且它有效。 但是现在我想做的是,寻找“en”和“fr”。 我在网上搜索过,但没有发现任何积极的方面。

  • 问题内容: 我想编写以下功能,该功能应在Excel工作表中使用: …这将通过ODBC在内部连接到SQL数据库,然后在其中执行 并将返回结果值作为函数GetRecField的结果。上面的SQL被授权仅返回一个记录(IOW KEY_FIELD具有唯一约束)。 当然,上面的函数可以在工作表中多次调用,所以请尽量避免盲目 TIA。 问题答案: 您可以编写一个自定义函数来做到这一点 打开VBA编辑器(ALT

  • 问题内容: 我有一个带有文档条目的父表,还有一个历史记录表,每次用户访问其中一个文档时,该表都会记录一个审计条目。 我正在编写一个搜索查询,以返回具有最新用户ID的文档列表(按各种条件过滤),以访问结果集中返回的每个文档。 因此对于 我希望从搜索中获得回报,例如 我可以轻松地通过一个SQL查询以及两个表之间的联接来做到这一点吗? 问题答案: 修改Andy White产生的内容,并用DB2(和ISO

  • 问题内容: 假设我有一个包含3列的表格:Id,类别,名称。 我想以这种方式查询表:为我获取OR或OR的行 如何?不必求助于 我想使用的庞大列表…但是可以将其与2列一起使用吗? 谢谢! 问题答案: 您可以创建一个临时表 然后加入你的主表 如果要从代码中使用该方法,则可以使用表参数进行操作。 定义表类型: 和一个存储的proc将读取数据: 然后,您可以使用C#代码中的代码,例如:

  • 3.移除值事件侦听器和脱机的区别。