eng*_*ico 4 java eclipse android firebase
我正在制作聊天应用,我有一个具有以下结构的Firebase.Chat1,Chat2,Chat3 ...用于保存不同聊天组的数据.Message1,Message2,Message3是第1组内的消息.它可以来自任何作者.
聊天
我想从"作者1"中检索所有消息的列表.含义Message1,Message3应该从Chat1中检索,而Message3也应该从Chat2中检索.我想显示来自1位作者的所有消息.
ref = new Firebase(FIREBASE_URL); //Root URL
ref.addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (DataSnapshot child : dataSnapshot.getChildren()) {
for (DataSnapshot childd : child.getChildren()) {
//This might work but it retrieves all the data
}
}
}
@Override
public void onCancelled() {
}
});
Run Code Online (Sandbox Code Playgroud)
这给了我全部数据!如何将其限制为"Author1"?
Fra*_*len 11
Firebase将始终检索您要求的完整节点.既然你要求一次聊天或整个聊天(你不清楚你的代码是哪一个),那就是你得到的.
如果您希望从Firebase获取更少的数据,您必须更加具体地了解您的要求.例如,如果你想显示客服1,然后通过监听开始孩子们的客服1的节点.
此代码段来自Android的Firebase指南:
// Retrieve new posts as they are added to Firebase
ref.addChildEventListener(new ChildEventListener() {
// Retrieve new posts as they are added to Firebase
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildKey) {
Map<String, Object> newPost = (Map<String, Object>) snapshot.getValue();
System.out.println("Author: " + newPost.get("author"));
System.out.println("Title: " + newPost.get("title"));
}
//... ChildEventListener also defines onChildChanged, onChildRemoved,
// onChildMoved and onCanceled, covered in later sections.
});
Run Code Online (Sandbox Code Playgroud)
此代码段与您当前的示例完成相同的操作,但for
Firebase 不是通过数据循环使用数据,而是一次向您提供一条消息.
有了这些,您可以过滤消息.这是一个两步过程:首先按子节点排序,然后限制返回哪些节点.
Query query = ref.orderByChild("Author").equalTo("Author1", "Author");
query.addChildEventListener(new ChildEventListener() {
// the rest of the code remains the same as above
Run Code Online (Sandbox Code Playgroud)
最后一点最好在有关查询的Firebase文档中进行说明.
归档时间: |
|
查看次数: |
47682 次 |
最近记录: |