Firebase ServerValue.TIMESTAMP如何在这种情况下工作

时间:2017-08-10 20:57:00

标签: android firebase firebase-realtime-database timestamp

我在answer中读到关于ServerValue.TIMESTAMP ValueEventListenersetValue将首先在本地时间开始两次,然后是服务器时间..我的问题是,只有代码才会发生使用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

1 个答案:

答案 0 :(得分:1)

My answer(你在问题中链接)解释了在#34;写操作中发生的事情&#34;。对于setValue()updateChildren(),也会发生同样的事情。