Reputation: 533
I want to update "isseen" from FALSE to TRUE in Firebase database from given below method:
I'm having this HashMap inside sendMessage() metod:
Map<String, Object> messageTextBody = new HashMap<>();
messageTextBody.put("message", messageText);
messageTextBody.put("type", "text");
messageTextBody.put("from", messageSenderId);
messageTextBody.put("to", messageRecieverId);
messageTextBody.put("messageID", messagePushId);
messageTextBody.put("time", saveCurrentTime);
messageTextBody.put("date", saveCurrentDate);
messageTextBody.put("isseen", false);
messageTextBody.put("url", "");
and here is Firebase Database nodes:
and here is my function to update "isseen":
ValueEventListener seenListener;
private void seenMessage(final String userID) {
seenListener = rootRef.child(messageRecieverId).child(messageSenderId).addValueEventListener(new ValueEventListener() {
@Override
public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
for (DataSnapshot dss : dataSnapshot.getChildren()) {
final Messages messages = dss.getValue(Messages.class);
if (messages.getFrom().equals(messageSenderId) && messages.getTo().equals(userID)) {
Map<String, Object> hashMap = new HashMap<>();
hashMap.put("isseen", true);
dataSnapshot.getRef().updateChildren(hashMap);
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError databaseError) {
}
});
}
@Override
protected void onPause() {
super.onPause();
reference.removeEventListener(seenListener);
}
Upvotes: 0
Views: 1036
Reputation: 36
While calling the 'updateChildren' method you have used the dataSnapshot object which is actually the parameter of onDataChange method. Instead you should use the object of DataSnapshot from your for-each loop, which is 'dss' in your case.
Upvotes: 2