gpt4 book ai didi

android - 使用 updateChildren 时在 Firebase 实时数据库中调用监听器的顺序

转载 作者:行者123 更新时间:2023-11-29 19:04:18 25 4
gpt4 key购买 nike

假设我在数据库上有两个节点(nodeAnodeB)并且我在这些节点上附加了两个监听器:

DatabaseReference rootRef = FirebaseDatabase.getInstance().getReference();    
rootRef.child(nodeApath).addChildEventListener(listenerA);
rootRef.child(nodeBpath).addValueEventListener(listenerB);

我正在使用 updateChildren 同时更新两个节点:

Map<String, Object> properties = new HashMap<>();
properties.put(nodeApath, valueA);
properties.put(nodeBpath, valueB);
rootRef.updateChildren(properties);

在这种情况下,首先调用哪个监听器?我知道 Firebase 使用单个套接字连接/流水线,并按照与更新顺序相同的顺序发送结果,但在 updateChildren 的情况下,多个节点同时更新,所以Firebase 如何处理?

如何确保首先调用特定的监听器(例如 listenerA)?

最佳答案

您不应依赖传递给 Firebase 实时数据库 SDK 的任何监听器顺序。如果您想要可预测的顺序,请创建一个聚合监听器,以完全按照您想要的顺序调用回调。它可能是这样的:

public class OrderedValueEventListener implements ValueEventListener {
private ArrayList<ValueEventListener> orderedListeners;
public OrderedValueEventListener(List<ValueEventListener> listeners) {
orderedListeners = new ArrayList<>(listeners);
}

@Override
public void onDataChange(DataSnapshot dataSnapshot) {
for (ValueEventListener listener : orderedListeners) {
listener.onDataChange(dataSnapshot);
}
}

@Override
public void onCancelled(DatabaseError databaseError) {
for (ValueEventListener listener : orderedListeners) {
listener.onCancelled(databaseError);
}
}
}

然后创建此监听器的实例,将您希望按顺序调用的其他监听器列表传递给您感兴趣的查询或数据库引用。

如果您希望在子监听器和值监听器之间进行排序,我认为 SDK 不会为您提供任何保证,并且实现可能随时更改,因为文档中从未定义排序。

关于android - 使用 updateChildren 时在 Firebase 实时数据库中调用监听器的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47805691/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com