【发布时间】:2018-11-06 15:39:16
【问题描述】:
final DatabaseReference db = FirebaseDatabase.getInstance().getReference();
Query mSeenRef = db.child("Messages").child(MessageSenderId).child(MessageRecieverId).orderByChild("From").equalTo(MessageRecieverId);
mSeenRef.addValueEventListener(new ValueEventListener(){
@Override
public void onDataChange(DataSnapshot dataSnapshot){
if(dataSnapshot.exists()) {
for (DataSnapshot ds : dataSnapshot.getChildren()) {
String keyId = ds.getKey();
DatabaseReference mSendersRef = db.child("Messages").child(MessageSenderId).child(MessageRecieverId).child(keyId);
DatabaseReference mRecieversRef = db.child("Messages").child(MessageRecieverId).child(MessageSenderId).child(keyId);
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("Seen", true);
mSendersRef.updateChildren(childUpdates);
mRecieversRef.updateChildren(childUpdates);
}
}
}
@Override
public void onCancelled(DatabaseError databaseError) {
}
});
此代码仅用于在基本聊天应用程序上设置SEEN=true,当您打开活动时它可以正常工作。
如果用户 A 打开聊天活动 B 会收到消息被看到的通知,并且当用户 A 在聊天中时 B 仍然会不断收到通知 A 正在查看 B 的消息,但是一旦 A 退出聊天,B 发送的消息仍然被称为即使 A 不在活动中,也如 A 所见。
只有当 A 关闭应用程序(即使是从后台关闭)时,B 才会停止向 A 发送消息。
我确定问题出在这个方法上,所以我只想知道如何让这个方法在活动关闭后停止执行。这个方法在ChatActivity的onCreate中。
【问题讨论】:
-
该方法将在每次收到新消息时触发,因为 addValueEventListener 一直在您的参考处监听新值,要修复它,您可以使用 addListenerForSingleValue 但这只会触发一次
-
非常感谢@GastónSaillén
-
将其添加到答案中,以便其他人也可以找到有用的答案
标签: java android database firebase firebase-realtime-database