假设我有两个客户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 ... */
});


上面的段落对此进行了说明,尽管并未直接说明它也适用于增添了事件的事件:


客户触发的事件并不总是对应的
与在其他设备上执行的写操作完全相同
客户。例如,如果另外两个客户端要设置相同的片段
大约在同一时间存储数据,不能保证两个
事件将在您的本地客户端上触发。取决于
时间,这两个更改可以汇总到一个本地
事件。无论如何,最终所有客户都会有一致的看法
数据,即使在流程中触发的事件可能有所不同
从客户端到客户端。

10-04 11:48