【问题标题】:Update Firebase Timestamp Value更新 Firebase 时间戳值
【发布时间】:2020-07-18 21:56:37
【问题描述】:

我想更新存储在我的 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) {


        }
    });

【问题讨论】:

  • 如果您使用云功能更新时间戳会变得很容易。 .
  • 我该怎么做?
  • 你的函数连接到云函数了吗?您是否编写过 Firebase 云功能?我的意思是想知道我需要为你编写多少代码。如果你知道打字稿很简单.. 或者让我知道你的函数是如何工作的,我会用代码示例向你解释
  • @Dharmaraj 我对 typescript 不太了解,但我做了一些云函数代码,因为这是我在应用程序中用于通知服务的代码。
  • @Dharmaraj 为此使用云功能将是矫枉过正。这只是一个简单的无限循环错误。在这段代码中,设置了Chat/${mCurrentUserId}/${mChatUser} 的值,它会触发监听器,它会设置Chat/${mCurrentUserId}/${mChatUser} 的值,它会触发监听器,等等。解决方案可以简单地将addValueEventListener 换成addListenerForSingleValueEvent

标签: java android firebase timestamp


【解决方案1】:

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

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

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

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

在一个 if 语句中检查新时间是否等于已经存储在 firebase 中的值,如果是真的,它什么也不做,但如果不是,那么它应该更新到当前时间。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-12
    • 1970-01-01
    相关资源
    最近更新 更多