我有一个名为posts
的数据库节点,如下所示:
posts
|
|---post1
|
|---post2
|
|---post3
帖子1,2,3是push id。它基本上是一个节点,将帖子存储为推送ID,这意味着它们会自动从上到下添加,最下面是新添加的帖子。
要收听此节点,我附加了一个子事件监听器以获取所有帖子,当我收到帖子时,我将它们存储在List对象(数组)中。现在为了跟踪列表的大小,我添加了一个日志语句。像这样:
private void getPosts(){
DatabaseReference post_ref = FirebaseDatabase.getInstance().getReference().child("posts");
Query query = post_ref.orderByKey().limitToLast(25);
ChildEventListener listener = new ChildEventListener(){
@Override
public void onChildAdded(DataSnapshot datasnapshot , String s){
//get posts
Post post = datasnapshot.getValue(Post.class);
//add to list
post_list.add(post);
//log the size of post_list
Log.e("SIZE" , String.valueOf(post_list.size()));
}
};
query.addChildEventListener(listener);
}
执行此操作后,日志会打印一个以1
开头并以25
结尾的数字列表。这表示子事件侦听器被调用了25次,25个对象被添加到列表中。
直到这里都有意义。
问题
我调用getPosts()
方法后。我在数据库中添加了一个新帖子,并且控制台打印了25
,这意味着大小仍然是25.但我刚添加了一个新帖子,这意味着它应该已添加到列表中。
我应该将26
作为新尺寸,为什么它仍然是25
?
另外,当我添加另一个帖子时,post_list
的大小仍会记录25
。有人可以解释一下吗?
答案 0 :(得分:1)
你只收到25件物品,因为你设置了
Query query = post_ref.orderByKey().limitToLast(25);
请阅读Google Firebase文档
The limitToLast() method is used to set a maximum number of children to be synced for a given callback. If we set a limit of 100, we will initially only receive up to 100 child_added events. If we have fewer than 100 messages stored in our Database, a child_added event will fire for each message. However, if we have over 100 messages, we will only receive a child_added event for the last 100 ordered messages. As items change, we will receive child_removed events for each item that drops out of the active list so that the total number stays at 100.
这是链接https://firebase.google.com/docs/reference/js/firebase.database.Query
答案 1 :(得分:0)
由于您使用了 limitToLast()
,因此您遇到了此问题。
用于 set a maximum number of children
的同步回拨。
如果您将限制设置为25,则最初最多只能收到25个child_added事件。
但是,如果您有超过25条消息,则只会收到最近25条有序消息的child_added事件。随着项目的更改,您将收到退出活动列表的每个项目的child_removed事件,以便 the total number stays at 25.