假设我有两个客户A和B
他们每个人都在几毫秒内向Firebase发送一条消息。
A写“ AAA”,B写“ BBB”。
假设A的消息首先到达那里。
然后对于客户A:
onDataChange()
“一些消息”
“另一个消息”
“ AAA”
onDataChange()
“一些消息”
“另一个消息”
“ AAA” “ BBB”
但是对于客户B:
onDataChange()
“一些消息”
“另一个消息”
“ BBB”
onDataChange()
“一些消息”
“另一个消息”
“ AAA” “ BBB”
因此,您可以看到每个客户端第一次获取数据时,他们都会收到不同的数据。
正确的数据会在紧接之后发送,但是仍然会首先破坏了我的程序的正常运行。
反正有解决办法吗?
谢谢你的帮助。
好的,我可以使用它,但是现在又卡住了
之前我在Firebase引用上使用过push(),所以它给出了类似的内容。-Qj73473429,然后我的数据(键->值)在它的下面。这很好,因为它按编写的顺序排序。
但是现在使用事务,我必须使用MutableData对象,而不是Firebase对象。而且我不能对此使用push,因此数据(键->值)然后由键按字母顺序排序,这对我不利。
您是否知道如何解决此问题,我尝试应用md.setPriority(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 ... */
});
上面的段落对此进行了说明,尽管并未直接说明它也适用于增添了事件的事件:
客户触发的事件并不总是对应的
与在其他设备上执行的写操作完全相同
客户。例如,如果另外两个客户端要设置相同的片段
大约在同一时间存储数据,不能保证两个
事件将在您的本地客户端上触发。取决于
时间,这两个更改可以汇总到一个本地
事件。无论如何,最终所有客户都会有一致的看法
数据,即使在流程中触发的事件可能有所不同
从客户端到客户端。