【发布时间】: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