Java 更新Firebase时间戳值

Java 更新Firebase时间戳值,java,android,firebase,timestamp,Java,Android,Firebase,Timestamp,我想更新firebase数据库中存储的初始服务器时间戳值,所以我这样做是为了时间戳值随后会被更新,但这似乎在我运行应用程序时造成了重大问题,起初,它工作正常,但在两次更改值后,它只是冻结,就像时间戳不断更新一样。我不知道怎样才能做到完美 下面是我添加并希望更改时间戳值的代码 mRootRef.child("Chat").child(mCurrentUserId).addValueEventListener(new ValueEventListener() { @Overrid

我想更新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) {


        }
    });

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

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

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

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

在检查新时间是否等于firebase中已存储的值的if语句中,如果它为真,则不会产生任何影响,但如果它不是真的,则应更新到当前时间。

我终于找到了问题的解决方案,我觉得应该将其发布在此处,因为此问题似乎没有任何在线解决方案

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

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

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

在检查新时间是否等于firebase中已存储的值的if语句中,如果为真,则不会产生任何影响,但如果为真,则应更新到当前时间。

如果使用云函数更新时间戳,则更新时间戳将变得很容易。我该怎么做?你的函数是否连接到云函数?您是否编写过Firebase云函数的代码?我只是想知道我需要为你编写多少代码。如果你知道打字脚本,那很容易。。或者让我知道你的函数是如何工作的我会用代码向你解释example@Dharmaraj我对typescript了解不多,但我已经编写了一些云函数代码,因为我在我的应用程序中使用了云函数作为通知服务。@Dharmaraj使用云函数来实现这一点未免太过分了。这只是一个简单的无限循环错误。在这段代码中,设置Chat/${mCurrentUserId}/${mChatUser}的值,该值触发侦听器,该值设置Chat/${mCurrentUserId}/${mChatUser}的值,该值触发侦听器,解决方案可能很简单,如将addValueEventListener替换为addListenerForSingleValueEventupdating时间戳,如果您使用cloud函数这样做,那么更新时间戳将变得很容易。我该怎么做?你的函数是否连接到云函数?您是否编写过Firebase云函数的代码?我只是想知道我需要为你编写多少代码。如果你知道打字脚本,那很容易。。或者让我知道你的函数是如何工作的我会用代码向你解释example@Dharmaraj我对typescript了解不多,但我已经编写了一些云函数代码,因为我在我的应用程序中使用了云函数作为通知服务。@Dharmaraj使用云函数来实现这一点未免太过分了。这只是一个简单的无限循环错误。在这段代码中,设置Chat/${mCurrentUserId}/${mChatUser}的值,该值触发侦听器,该值设置Chat/${mCurrentUserId}/${mChatUser}的值,该值触发侦听器,等等。解决方案可以很简单,如将addValueEventListener替换为addListenerForSingleValueEvent