我在answer中读到关于ServerValue.TIMESTAMP
ValueEventListener
,setValue
将首先在本地时间开始两次,然后是服务器时间..我的问题是,只有代码才会发生使用ref.addValueEventListener(new ValueEventListener() {
public void onDataChange(DataSnapshot dataSnapshot) {
System.out.println(dataSnapshot.getValue());
}
public void onCancelled(DatabaseError databaseError) { }
});
ref.setValue(ServerValue.TIMESTAMP);
:
updateChildren
如果此次通话为ServerValue.TIMESTAMP
,也会发生这种情况,请注意Map<String, Object> someMap = new HashMap<>();
someMap.put("id", 239231);
someMap.put("time", ServerValue.TIMESTAMP);
someMap.put("name", "some name");
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("someKey", someMap);
mFirebase.updateChildren(childUpdates, new CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
}
});
FriendlyMessage friendlyMessage = new
FriendlyMessage(mMessageEditText.getText().toString(),
mUsername,
mPhotoUrl,
null /* no image */);
mFirebaseDatabaseReference.child(MESSAGES_CHILD)
.push().setValue(friendlyMessage);
更新
这是我尝试做的事 在Firebase code lab for Friendly Chat app(friendlychat).中,我替换了如下所示的发送聊天消息代码:
childUpdates
使用 final String pushKeyAddress = mFirebaseDatabaseReference.child(MESSAGES_CHILD).push().getKey();
Map<String, Object> someMap = new HashMap<>();
someMap.put("text", mMessageEditText.getText().toString());
someMap.put("name", mUsername);
someMap.put("photoUrl", mPhotoUrl);
someMap.put("time", ServerValue.TIMESTAMP);
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put(MESSAGES_CHILD.concat("/").concat(pushKeyAddress), someMap);
mFirebaseDatabaseReference.updateChildren(childUpdates, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
System.out.println(databaseError);
}
});
代替:
CompletionListener
我发现onComplete
ServerValue.TIMESTAMP
只会触发一次而不是我预期的两倍,因为我使用了pom.xml
答案 0 :(得分:1)
My answer(你在问题中链接)解释了在#34;写操作中发生的事情&#34;。对于setValue()
和updateChildren()
,也会发生同样的事情。