【问题标题】:Firebase Realtime Database Query AndroidFirebase 实时数据库查询 Android
【发布时间】:2020-07-31 14:40:06
【问题描述】:

我正在使用 orderByKey() 运行 查询,如下所示:-

private ChildEventListener childEventListener=new ChildEventListener() {
        @Override
        public void onChildAdded(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {
            Log.d("DEBUG",String.valueOf(snapshot.getValue()));
        }

        @Override
        public void onChildChanged(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

        }

        @Override
        public void onChildRemoved(@NonNull DataSnapshot snapshot) {

        }

        @Override
        public void onChildMoved(@NonNull DataSnapshot snapshot, @Nullable String previousChildName) {

        }

        @Override
        public void onCancelled(@NonNull DatabaseError error) {

        }
    };

DatabaseReference ref=FirebaseDatabase.getInstance().getReference("/data");
Query query=ref.orderByKey();
query.addChildEventListener(childEventListener);

然后,当我在多个设备中使用 ref 添加子时

ref.push().setValue("someValue");

我希望onChildAdded() 方法中的Log 以数据库中看到的排序顺序打印子项。但实际上它首先打印设备本身添加的子项(因为侦听器会立即触发本地事件),然后对其他孩子进行排序。我认为这超出了查询排序数据的目的。

有没有办法解决这个问题?

编辑: 假设两个设备同时运行上面显示的查询。 在设备 1 中:

ref.push().setValue("I am device 1");

在设备 2 中:

ref.push().setValue("I am device 2");

之后,如果我查看数据库,我会看到以下内容:-

data:
    -MD_hQfTlzo9fH03mbjT:I am device 1
    -MD_hQkXqB0nEZiGdy5A:I am device 2

所以我希望两个设备的 childeventlistener 中的数据以相同的方式排序。在设备 1 中,日志输出为:

I am device 1
I am device 2

但在设备2中,日志输出为:

I am device 2
I am device 1

【问题讨论】:

  • 请编辑问题以更详细地显示您期望/希望的输出,同时在查询位置显示数据库中的数据。你现在拥有的东西非常抽象,难以想象。
  • 编辑添加更多细节。

标签: firebase firebase-realtime-database


【解决方案1】:

onChildAdded 不传递被查询节点下的全部子节点。在查询最初执行后,onChildAdded 将按照查询指定的顺序为每个子项调用一次,在查询时。只要侦听器仍处于连接状态,它就会为之后添加的每个附加子级收到另一个对onChildAdded 的调用。同样,它不会重新传递之前添加的子节点。

如果您希望在每次更改被查询的节点时按顺序传递整个子节点集,则不应使用ChildEventListener。您应该改用ValueEventListener

【讨论】:

  • 我没有提到任何我想要整个数据的地方。
  • 这确实是您唯一的选择。您可以过滤和订购您想要的东西,您将永远得到一切。
猜你喜欢
  • 2017-10-11
  • 2019-07-31
  • 2018-09-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多