android - Firebase onChildAdded 获取新数据

标签 android firebase firebase-realtime-database

如果我的 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/

相关文章:

java - 在 Appium Android 上处理 "Open With"菜单?

java - 构建 .aar 时如何修复错误

java - Android OpenVPN 连接

javascript - AngularFire,如何通过uid在页面上显示姓名/电子邮件?

android - Firebase 保持同步(真)

android - IONIC apk 生成问题

android - 如何禁用返回、主页、多任务物理按钮?

android - 获取firebase android中特定值的推送ID

angularjs - 如何在firebase中使用相同的方法同时更新多个对象中的数据?

javascript - Angular 2 ngFor 值(数字)总结