【问题标题】:Firebase SDK - Will onchildchanged be triggered in the same order as the setValue are triggered?Firebase SDK - 是否会以与触发 setValue 相同的顺序触发 onchildchanged?
【发布时间】:2021-01-11 10:11:43
【问题描述】:

我想知道 Firebase SDK onChildChanged() 的触发顺序是否与我的应用程序触发 setValue 的顺序相同。这是一个例子:

private void testAdds ()
{
    this.mFBD.getReference("PATH/").child(ID1).setValue(1);
    this.mFBD.getReference("PATH/").child(ID2).setValue(2);
    this.mFBD.getReference("PATH/").child(ID3).setValue(3);
}

...

@Override
public void onChildChanged(@NonNull DataSnapshot dataSnapshot, @Nullable String s)
{
    // Will this be triggered in the same order as my setValue(1-3) commands??
    // Or isn't this guaranteed?
}

如果不能保证它会在 onChildChanged 或 onChildAdded 中以与触发 setValue 的顺序相同的顺序接收,我如何更改它以确保它们在另一侧也按顺序排列?

提前致谢。

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    我想知道 Firebase SDK onChildChanged 的​​触发顺序是否与我的应用程序触发 setValue 的顺序相同。

    它可能会发生,但不能保证。如果您想 100% 确定第二个值是在第一个值之后写入的,那么您应该在第一个写入操作完成后写入第二个值。这可以通过附加一个监听器来完成,您可以在以下代码行中看到:

    this.mFBD.getReference("PATH/").child(ID1).setValue(1).addOnCompleteListener(new OnCompleteListener<Void>() {
        @Override
        public void onComplete(@NonNull Task<Void> task) {
            if (task.isSuccessful()) {
                this.mFBD.getReference("PATH/").child(ID2).setValue(2);
            }
        }
    });
    

    通过这种方式,您可以确定订单是您想要的。如果您对所有三个都需要相同的东西,则适用相同的原则。将另一个侦听器附加到第二个写入操作,并在第二个完成后执行第三个。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-04-07
      • 1970-01-01
      • 1970-01-01
      • 2020-09-11
      • 2011-01-10
      • 2018-01-14
      • 1970-01-01
      相关资源
      最近更新 更多