How to get automatically generated firebase push id from firebase database

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:

firebase 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)

Leave a Reply

Your email address will not be published. Required fields are marked *