当与addListenerForSingleValueEvent()一起使用时,Firebase返回旧的数据集

时间:2017-02-10 11:01:52

标签: android firebase firebase-realtime-database nativescript angular2-nativescript

我有一次查询,并且不想保留一个监听器,以便在发送手动触发器时更新数据。

所以我的查询是这样的:

var ref = this.instance.child('/user/manish/today/events')
    .orderByChild('endDateTime')
    .endAt(endEventTime)
    .limitToLast(10)
    .addListenerForSingleValueEvent(this.previousEventListeners);


  this.previousEventListeners = new com.google.firebase.database.ValueEventListener({
      onDataChange: (snapshot) => {
        console.log("Value from native firebase access");
        console.dump(this.testing(snapshot.getValue()));
        let result = {
          value : this.testing(snapshot.getValue()),
          type : "ValueChanged"
        };
        console.dump(result);
      },
      onCancelled: (databaseError) => {
        console.log(databaseError.getMessage());
        hideActivtiyIndicator();
      }
  });

即使添加了与查询条件匹配的新记录,它也会返回相同的数据集。

谢谢

1 个答案:

答案 0 :(得分:5)

是的,我们在自己的应用中遇到过这种情况。如果您需要启用磁盘持久性的最新数据,则需要订阅所有事件值更新,而不仅仅是调用单个值。这特别令人困惑,因为尽管有这种行为,Firebase仍会调用服务器获取新值 - 它只是赢回给你一个!

我向Firebase提交了有关此问题的支持请求,他们表示这是预期的行为。我还建议他们澄清文件,他们说Thanks for this comprehensive feedback. We do value this kind of inputs from the developers. This will be included in our feature request list and will be discussed with our engineers. Unfortunately, I can't share any timeline or definite details as this will be monitored internally.

希望澄清情况。对于它的价值,我们使用FIRDatabaseReference类别(iOS,为您的平台使用适当的比喻)解决了这个问题,增加了额外的功能。它调用SingleValueEvent然后在500毫秒后再次调用它,并将值两次返回给调用者。 (如果调用者在此期间离开,则使用弱引用进行回调。)500ms似乎是合适的 - 用户被给予立即显示值,如果他们离线或网络很慢,那么& #39;他们所看到的一切。但如果他们在网上并拥有不错的网络访问权限,那么很快就会为他们提供最新的数据。