使用ServerValue.TIMESTAMP(Android)时,Firebase onDataChanged触发两次

时间:2016-06-20 18:04:05

标签: android firebase firebase-realtime-database

另一个触发Firebase问题的事件。

我有类Post,它包含一个存储时间戳的属性,如下所示:

public class Post {

    public int likeCount;
    private Long createDate;
    public String createBy;

    public java.util.Map<String, String> getCreationDate() {
        return ServerValue.TIMESTAMP;
    }

    @Exclude
    public Long getCreateDateLong() {
        return createDate;
    }

    public Post() {
    }
}

当我向firebase-database添加一个新帖子时,如下所示:

Post newPost = new Post();
newPost.createBy = firebaseAuth.getCurrentUser().getUid();
databaseReference.child("posts").push().setValue(newPost);

ValueEventListener()的 onDataChanged 将触发两次, 并且将一个接一个地触发ChildEventListener()的 onChildAdded onChildChanged

我怀疑这是因为 ServerValue.TIMESTAMP 实际上导致createDate在创建子项后更新。

这是一个非常烦人和意想不到的行为。它应该只触发一次。

我厌倦了这些问题。首先使用Firebase数据库是一个正确的决定吗?感叹......

[更新]
弗兰克here清楚地解释了这种行为。

但是,是否有处理此行为的常见模式? 在我有监听器设置并在数据更改时对UI执行某些操作的情况下。然后我在其中插入带有时间戳的新记录。接下来发生的事情是我的UI实际上必须为一个插入事件执行两次

我知道有一个 addListenerForSingleValueEvent ,但我使用它的原因是因为我也同样处理来自任何地方的数据更新。如果我使用addListenerForSingleValueEvent,我将不得不在插入之前删除ValueEventListener,然后在插入完成后将其添加回来。这对我来说似乎不对。

在事件回调中是否有任何可以用来确定天气的东西,这是我关心并想要做些什么的改变?我错过了什么吗?

0 个答案:

没有答案