【发布时间】:2020-05-06 22:23:08
【问题描述】:
我已经为此苦苦挣扎了半天多,最终想在这里提出我的问题。
我正在使用 firebase 实时数据库开发 Android 应用程序。 我已开启离线持久性。
我正在使用 onDataChange 方法创建一个新的 ValueEventListener 对象,如下所示:
changeListener = new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
...}};
dbRef.addValueEventListener(changeListener);
通过应用程序中的另一个片段,我从 dbRef 指向的位置删除了一个元素。假设最初我在 dbRef 中有十个元素。如果我在 onDataChange 代码中设置一个断点,我会看到它连续调用了 3 次。第一次,dataSnapShot 有九个元素。第二次,它有十个元素(包括刚刚删除的那个),最后第三次,它又是九个元素。
请注意,如果我关闭离线持久性,则不会发生此问题。如果我手动从数据库 consul 中删除一个元素,这两种情况都不会发生。 在这两种情况下,onDataChange 只会被调用一次。
我还在片段的 onResume 方法中正确添加了侦听器,并在我的 onPause 中将其删除。
我的问题是:
- 这是预期行为吗?
- 如果是这样,为什么会这样?
- 有没有办法避免对 onDataChange 的三个调用?
提前非常感谢
【问题讨论】:
-
你试过用 singleValueEventListener 代替 valueEventListener 吗?
标签: android firebase firebase-realtime-database