另一个触发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,然后在插入完成后将其添加回来。这对我来说似乎不对。
在事件回调中是否有任何可以用来确定天气的东西,这是我关心并想要做些什么的改变?我错过了什么吗?