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