gpt4 book ai didi

android - Firebase onChildAdded 获取新数据

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:19:34 26 4
gpt4 key购买 nike

如果我的 firebase 引用中存储了一个包含 50,000 个项目的列表,并且自上次客户端在线和监听以来已将 5 个项目添加到该列表中,我必须使用哪个回调以便仅触发它对于已添加的 5 个新项目?

我使用 Firebase.getDefaultConfig().setPersistenceEnabled(true); 在我的客户端上启用了离线持久性。我有一个监听器绑定(bind)到一个监听添加到引用中的 child 的 Activity 。每次创建 Activity 时,都会为引用中的所有数据调用 onChildAdded。是否可以让 onChildAddedonChildRemoved 仅针对我的本地缓存和 firebase 服务器上的数据之间的“差异”调用?或者,如果这不可能,那么在 firebase 的最新更新之后仅触发那些 onChild* 回调?

最佳答案

Everytime the activity is created onChildAdded is called for all the data in the reference. Is it possible to make onChildAdded and onChildRemoved be called only for "diff" between my local cache and the data on the firebase server?

不,这是不可能的。来自documentation on event types :

child_added is triggered once for each existing child and then again every time a new child is added to the specified path

现在回到您最初的问题:

which callback would I have to use such that it is only triggered for the 5 new items that have been added?

那就是:

ref.limitToLast(5)...

但这需要您知道自上次收听以来有多少项目被添加到列表中。

更常见的解决方案是跟踪您已经看到的最后一个项目,然后使用 startAt() 从您上次所在的位置开始触发事件:

ref.orderByKey().startAt("-Ksakjhds32139")...

然后您将保留在共享首选项中看到的最后一个 key 。

同样,您可以保留上次 Activity 可见的时间:

long lastActive = new Date().getTime();

然后为每个项目添加带有 Firebase.ServerValue.TIMESTAMP时间戳,然后:

ref.orderByChild("timetstamp").startAt(lastActive+1)...

关于android - Firebase onChildAdded 获取新数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34745248/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com