如何从Firebase实时数据库获取自动生成的Push ID
问题:如何获取Firebase push()生成的消息唯一ID?
我用Firebase的push()方法给每条消息生成唯一ID,想知道怎么获取这个ID,以下是我的消息发送代码:
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);
我的Firebase数据库节点结构:

解决方案
你当前的代码已经正确获取到了push()生成的唯一ID,就是通过userMessagesKeyRef.getKey()得到的messagePushID变量。
具体说明:
- 调用
push()方法时,Firebase会立即生成唯一ID,无需等待数据写入完成就能获取 push()返回的DatabaseReference对象包含这个新ID,调用getKey()即可提取- 你已经把该ID存入消息数据的
messageID字段,同时用它作为节点路径的一部分写入发送方和接收方的消息节点,这个做法完全正确
如果后续读取消息时需要获取该ID,有两种方式:
- 直接从消息数据的
messageID字段读取(你已存储该值) - 监听消息节点时,通过
DataSnapshot.getKey()获取节点键(即push生成的ID)
读取消息的示例代码:
reference.child("Messages").child(currentUserID).child(targetUserID) .addValueEventListener(new ValueEventListener() { @Override public void onDataChange(DataSnapshot dataSnapshot) { for (DataSnapshot snapshot : dataSnapshot.getChildren()) { // 获取push生成的ID String messageId = snapshot.getKey(); // 读取已存储的messageID String storedMessageId = snapshot.child("messageID").getValue(String.class); } } @Override public void onCancelled(DatabaseError databaseError) { // 处理错误逻辑 } });
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

