使用Firebase ChildEventListener
时,我按这样推动:
UserHistoryMap.put(UserHistory.TIME, ServerValue.TIMESTAMP);
当onChildAdded
被调用时,TimeStamp
出错,而对onChildChanged
的后续调用将具有正确的TimeStamp
。我理解为什么因为这个answer,但我应该在onChildAdded
和onChildChanged
中添加相同的代码:
@Override
public void onChildAdded(DataSnapshot snapshot, String prevKey) {
UserHistory addressHistory = snapshot.getValue(UserHistory.class);
HistoryManager.getInstance().addHistory(
mFireBaseAuth.getCurrentUser().getUid(),
addressHistory.getAddressId(),
addressHistory.getTime());
MyLog.i(TAG, "TESTING onChildAdded for " + " time "+ addressHistory.getTime());
}
@Override
public void onChildChanged(DataSnapshot snapshot, String prevKey) {
UserHistory addressHistory = snapshot.getValue(UserHistory.class);
HistoryManager.getInstance().addHistory(
mFireBaseAuth.getCurrentUser().getUid(),
addressHistory.getAddressId(),
addressHistory.getTime());
MyLog.i(TAG, "TESTING onChildChanged for " + " time "+ addressHistory.getTime());
}
这有效,但我觉得必须有更好的方法,因为根据我上面的代码,我实际上保存了错误的TimeStamp
我在文档中看不到有关此问题的任何解决方法,但可能在我错过的一些Google I / O会话中,但无论如何都希望得到一些意见。
当然,对于ValueEventListener
也会发生这种情况但是很明显如何处理它,因为它只有一个onDataChange