【发布时间】:2018-12-23 23:06:25
【问题描述】:
尝试在我的应用中实现已读回执功能...
发布数据
private void sendMessage() {
String messageText = messageArea.getText().toString();
if (TextUtils.isEmpty(messageText)) {
Toast.makeText(getApplicationContext(), "Can't Send Blank Message", Toast.LENGTH_SHORT).show();
} else {
String message_sender_ref = "Messages/" + MessageSenderId + "/" + MessageRecieverId;
String message_reciver_ref = "Messages/" + MessageRecieverId + "/" + MessageSenderId;
Map messageTextBody = new HashMap<>();
messageTextBody.put("Message", messageText);
messageTextBody.put("Seen", "False");
messageTextBody.put("Type", "Text");
messageTextBody.put("Time", ServerValue.TIMESTAMP);
messageTextBody.put("From", MessageSenderId);
DatabaseReference user_message_key = mDatabaseReference.child("Messages").child(MessageSenderId).child(MessageRecieverId).push();
String message_push_id = user_message_key.getKey();
Map messageBodyDetails = new HashMap();
messageBodyDetails.put(message_sender_ref + "/" + message_push_id, messageTextBody);
messageBodyDetails.put(message_reciver_ref + "/" + message_push_id, messageTextBody);
mDatabaseReference.updateChildren(messageBodyDetails, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {
if (databaseError != null) {
Log.d("Chat_Log", databaseError.getMessage().toString());
}
messageArea.setText("");
}
});
}
}
现在我如何访问唯一 ID 内的“Seen = False”数据...我可以通过 ValueEventListener 访问它,但我该如何更改呢?我只知道要获取数据,但我想更改它的数据...有人可以帮帮我吗
尝试过的方法
DatabaseReference seenRef = mDatabaseReference.child("Messages").child(MessageSenderId).child(MessageRecieverId).child("Seen");
seenRef.setValue("True");
我尝试了上述方法,但它只是在它旁边再创建一个 hild 并将其值设置为 true....有人请帮助我...提前致谢
数据库 - https://ibb.co/js3iDd
【问题讨论】:
-
能否请您添加您的数据库的图像?
-
请看我编辑的问题
-
好吧,从我从您的数据库图片中可以看出,
seenRef.setValue(True);创建了另一条路径。更新seen属性时访问的消息路径与在数据库中推送消息时访问的路径不同
标签: java android firebase firebase-realtime-database