java - 更新 Firebase 时间戳值
问题描述
我想更新存储在我的firebase数据库中的初始服务器时间戳值,所以我这样做的方式是随后更新时间戳值,但这似乎在我运行应用程序时引起了重大问题,起初它可以工作很好,但是在两次更改值之后,它就像时间戳不断更新一样冻结。我不知道我怎样才能使它完美。
下面是我添加并想要更改时间戳值的代码。
mRootRef.child("Chat").child(mCurrentUserId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
if (!dataSnapshot.hasChild(mChatUser)){
Map chatAddMap = new HashMap();
chatAddMap.put("seen",false);
chatAddMap.put("uid",mChatUser);
chatAddMap.put("timestamp", ServerValue.TIMESTAMP);
Map chatUserMap = new HashMap();
chatUserMap.put("Chat/" + mCurrentUserId + "/" + mChatUser,chatAddMap);
chatUserMap.put("Chat/" + mChatUser + "/" + mCurrentUserId,chatAddMap);
mRootRef.updateChildren(chatUserMap, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null){
Log.d("CHAT LOG", databaseError.getMessage().toString());
}
}
});
}else {
mRootRef.child("Chat").child(mCurrentUserId).child(mChatUser).child("timestamp").setValue(ServerValue.TIMESTAMP);
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
解决方案
我终于找到了我的问题的解决方案,我觉得我应该在这里发布,因为这个问题似乎没有任何在线解决方案。
所以这里发生的事情是,我没有添加检查需要在timestamp
更新之前为真的情况,因为它不知道什么时候停止,所以导致了无限循环。
所以我通过简单地包装这段代码来解决它
mRootRef.child("Chat").child(mCurrentUserId).child(mChatUser).child("timestamp").setValue(ServerValue.TIMESTAMP);
在检查新时间是否等于已存储在 firebase 中的值的 if 语句中,如果为 true,则不执行任何操作,但如果不是,则应更新为当前时间。
推荐阅读
- python - 如何在 Python 中列出所有类 cached_properties?
- html-table - HTML 表格在 Open Office Writer 中无法正确显示
- azure - 如何在 Python 中从 YAML 文件创建 Azure ML Inference_Config 和 Deployment_Config 类对象?
- arrays - 当我的索引是变量时无法访问数组值
- java - 如何在 java 中为 hashcode() 方法编写 ptest(mutation test)
- angular - 为什么在 Angular 中不显示输出(浏览器预览)的变化
- kotlin - 一起使用 akka actor 模型和 kotlin 协程
- ssl - javax.net.ssl 警告“user_canceled”是什么意思?
- javascript - 我如何使用 WPML 翻译 javascript 中的 html 文本
- python - PyPDF 超链接