假设我有两个客户A和B. 他们每个人都会在几毫秒之内向firebase写一条消息。 写入" AAA",B写入" BBB"。 让我们假设A&#39的消息首先到达那里。
然后是客户A:
onDataChange()
"一些消息"
"另一条消息"
" AAA"
onDataChange()
"一些消息"
"另一条消息"
" AAA" < ---正确为" AAA"是第一次
" BBB"
但对于客户B:
onDataChange()
"一些消息"
"另一条消息"
" BBB"
onDataChange()
"一些消息"
"另一条消息"
" AAA" < ---正确为" AAA"是第一次
" BBB"
因此,您可以看到每个客户端第一次获取数据时,会收到不同的数据。 刚刚发送了正确的数据,但是,这个第一次收到的数据在某些时候会破坏我的程序工作。 无论如何要解决这个问题吗?
感谢您的帮助。
好的,我让它运转了,但现在我又被卡住了
之前我在Firebase引用上使用了push(),因此它提供了类似... -Qj73473429的内容,然后我的数据(key-> value)就在它之下。这很好,因为它按照它的顺序排序。
但现在使用Transaction,我必须使用MutableData对象,而不是Firebase对象。我无法使用push,因此数据(key->值)按键按字母顺序排序,这对我没有好处。
你知道我怎么解决这个问题,我尝试应用md.setPriority(1),但它似乎没有什么区别。
这很烦人,只是一个接一个的问题,arghh。
如果可以,请帮忙
答案 0 :(得分:1)
由于我们正在讨论通过网络空间飞行的实时比特,因此无法保证哪些订单消息会到达客户端。 Firebase不是试图保证不可能,而是明确地告诉您每个新记录的前一个孩子是什么。
来自reading data下的示例。请注意prevChildName
字符串:
Firebase usersRef = new Firebase("https://SampleChat.firebaseIO-demo.com/users/");
usersRef.addChildEventListener(new ChildEventListener() {
@Override
public void onChildAdded(DataSnapshot snapshot, String previousChildName) {
String userName = snapshot.getName();
System.out.println(userName + " was added after " + previousChildName);
},
/* other methods ... */
});
这在上面的段落中有所阐述,虽然没有直接说明它也适用于child_added事件:
在您的客户端上触发的事件并不总是对应的 完全与在其他上执行的写操作 客户端。例如,如果另外两个客户端设置相同的部分 大约在同一时间的数据,不能保证两个 将在您的本地客户端上触发事件。取决于 时机,这两个变化可以汇总到一个本地 事件。无论如何,最终所有客户都将拥有一致的视图 即使在流程中触发的事件可能不同,也会对数据进行处理 从客户到客户。