首页 > 解决方案 > 更新 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) {


        }
    });

标签: javaandroidfirebasetimestamp

解决方案


我终于找到了我的问题的解决方案,我觉得我应该在这里发布,因为这个问题似乎没有任何在线解决方案。

所以这里发生的事情是,我没有添加检查需要在timestamp更新之前为真的情况,因为它不知道什么时候停止,所以导致了无限循环。

所以我通过简单地包装这段代码来解决它

                mRootRef.child("Chat").child(mCurrentUserId).child(mChatUser).child("timestamp").setValue(ServerValue.TIMESTAMP);

在检查新时间是否等于已存储在 firebase 中的值的 if 语句中,如果为 true,则不执行任何操作,但如果不是,则应更新为当前时间。


推荐阅读