android–Firebase onChildAdded用于新数据

android–Firebase onChildAdded用于新数据,第1张

概述如果我的firebase引用中存储了50,000个项目的列表,并且自上次客户端在线和侦听以来已经将5个项目添加到该列表中,那么我必须使用哪个回调才会触发5已添加的新项目?我在我的客户端上使用Firebase.getDefaultConfig()启用了离线持久性.setPersistenceEnabled(true);.我有一个监听器绑

如果我的firebase引用中存储了50,000个项目的列表,并且自上次客户端在线和侦听以来已经将5个项目添加到该列表中,那么我必须使用哪个回调才会触发5已添加的新项目?

我在我的客户端上使用Firebase.getDefaultConfig()启用了离线持久性.setPersistenceEnabled(true);.我有一个监听器绑定到一个活动,听取孩子们添加到参考.每次为onChildAdded创建活动时,都会为引用中的所有数据调用.有可能只为我的本地缓存和firebase服务器上的数据之间的“diff”调用onChildAdded和onChildRemoved吗?或者如果那是不可能的,那么在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")...

然后,您将保留您在共享首选项中看到的最后一个密钥.

同样,您可以通过以下方式保持上次活动可见:

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

然后将Firebase.ServerValue.TIMESTAMP的时间戳添加到每个项目,然后:

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

总结

以上是内存溢出为你收集整理的android – Firebase onChildAdded用于新数据全部内容,希望文章能够帮你解决android – Firebase onChildAdded用于新数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1100973.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-28
下一篇 2022-05-28

发表评论

登录后才能评论

评论列表(0条)

保存