如何查询firebase数据库以返回值的父母的父母?

时间:2018-03-20 11:56:18

标签: java android firebase firebase-realtime-database

我正在开发团队聊天应用程序。我在firebase中存储聊天数据。

这是我的数据结构enter image description here

  • 聊天记录存储在名为chats的节点下。
  • chats的每个直系孩子都是团队的名称(如whatsapp ..聊天组)。
  • team节点包含所有聊天消息。聊天消息已存储
  • ,父节点格式为timestamp_chat

我的问题

现在我必须创建一个firebase查询,以便从key获取此团队节点。

就是这样 如果from:字段包含给定的搜索值(例如," ragesh"),则父节点" team_name"必须退回(例如," teamrova")作为数据快照。

简单来说,我想要在from字段中拥有特定用户名的团队的数据快照。

我的工作

我尝试了以下代码:

  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");未被调用。它   也没有调用onCancelled。(所以,没有错误)。

我对此感到震惊。请帮我。

1 个答案:

答案 0 :(得分:2)

获取用户名:

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");

以上代码是addValueEventListener

的替代方案