【发布时间】:2019-06-07 17:02:05
【问题描述】:
关于这个话题和ChildEventListener的类似问题,没有相关的答案,所以这是我的。
我有一个本地 SQLite 数据库,其中包含所有数据,我也有 Firebase 实时数据库,我正在更新所有用户的新条目或实时更改。我目前正在使用ChildEventListener 进行如下操作:
DatabaseReference rootRef = FirebaseDatabase.getInstance().getDatabase().getReference();
DatabaseReference childRef = rootRef.child("my_root");
ChildEventListener eventListener = new ChildEventListener()
{
....
};
childRef.addChildEventListener(eventListener);
至于功能,使用此代码,我可以实时更改子项、获取新条目、删除子项以及我需要的一切,但有一个问题。当监听器的这个特定活动加载时,onChildAdded 监听器会被这个根上的每个孩子调用大量的时间,如文档中所述:
child_added 为每个现有的孩子触发一次,然后在每次将新的孩子添加到指定路径时再次触发
所以我想把注意力集中在我真正需要的东西上,我已经做到了:
rootRef.orderByKey().startAt("-WhatTF123456789")...
但后来我失去了我的 CRUD 功能,因为它正在侦听新条目而不是所有条目。
所以我想出了一个解决方案。保留对 FireBase 数据库所做的所有更改的节点,以及所有已读取并对本地数据库进行更改的用户的节点,以了解谁需要更新,然后使用 addChildEventListener 到此特定节点。但这似乎是多余的。
我有什么办法来处理这种情况?
【问题讨论】:
-
您的选择是 1) 忽略冗余子节点,2) 查询从第一个新子节点开始。第二种选择当然是首选,因为第一种下载的数据太多。你的一天“但后来我失去了我的 CRUD 能力”。你能详细说明你的意思吗?或者更好的是,在代码中显示它?
-
@FrankvanPuffelen 我的代码基本上是上面显示的
ChildEventListener裸露,其中包含它的实现方法。当我说我正在失去我的 CRUD 功能时,这是因为当我正在收听最后一个孩子时,例如:childRef.orderByKey().limitToLast(1),我只在这个特定的最后一个孩子上获得更新和删除回调。我想知道节点上的所有这些,所以我不必使用第一个选项。还是您在谈论其他事情?我在这里错过了什么吗?
标签: java android firebase firebase-realtime-database