Issue
My app sends every message with a unique id (using push() method) so how can I get this id?
my code to send message :
String messageSenderRef = "Messages/" + messageSenderID + "/" + messageReceiverID;
String messageReceiverRef = "Messages/" + messageReceiverID + "/" + messageSenderID;
DatabaseReference userMessagesKeyRef = reference.child("Messages")
.child(messageSenderID).child(messageReceiverID).push();
String messagePushID = userMessagesKeyRef.getKey();
Map messageTextBody = new HashMap();
messageTextBody.put("message",messageText);
messageTextBody.put("type","text");
messageTextBody.put("to",messageReceiverID);
messageTextBody.put("from",messageSenderID);
messageTextBody.put("time",time);
messageTextBody.put("date",date);
messageTextBody.put("isSeen",false);
messageTextBody.put("messageID",messagePushID);
Map messageBodyDetails = new HashMap();
messageBodyDetails.put(messageSenderRef + "/" + messagePushID,messageTextBody);
messageBodyDetails.put(messageReceiverRef + "/" + messagePushID,messageTextBody);
My Firebase database node:
Solution
If you want to read the value of messageID
field, then you should create a reference that points to the cG6v...PXi1
node and use the following lines of code:
DatabaseReference db = FirebaseDatabase.getInstance().getReference();
DatabaseReference messagesRef = db.child("Messages");
DatabaseReference messageReceiverIdRef = messagesRef.child(messageSenderID).child(messageReceiverID);
messageReceiverIdRef.get().addOnCompleteListener(new OnCompleteListener<DataSnapshot>() {
@Override
public void onComplete(@NonNull Task<DataSnapshot> task) {
if (task.isSuccessful()) {
for (DataSnapshot ds : task.getResult().getChildren()) {
String messageId = ds.child("messageID").getValue(String.class);
Log.d("TAG", messageId);
}
} else {
Log.d("TAG", task.getException().getMessage()); //Never ignore potential errors!
}
}
});
The result in the logcat will be:
-ND-fz....l2krv
...
Answered By – Alex Mamo
Answer Checked By – Katrina (FlutterFixes Volunteer)