我正在开发团队聊天应用程序。我在firebase中存储聊天数据。
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。(所以,没有错误)。
我对此感到震惊。请帮我。
答案 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