在Custom Object Firebase Android中获取参考和密钥

我希望将每个特定对象的dataSnapshot和key的引用传递给自定义的“Message”对象。

我已经尝试在Message.class中使用键’String key’,但它似乎返回null。

这是我的Message对象当前的方式:

public class Message { private String key; private String sender_id; private String sender_username; private String receiver_username; private String receiver_id; private String chat_id; private String message; private Firebase ref; private double createdAt; private boolean read; public Message() { // empty default constructor, necessary for Firebase to be able to deserialize messages } public String getKey() { return key; } public String getSender_id() { return sender_id; } public String getSender_username() { return sender_username; } public String getReceiver_username() { return receiver_username; } public String getReceiver_id() { return receiver_id; } public String getChat_id() { return chat_id; } public String getMessage() { return message; } public Firebase getRef() { return ref; } public double getCreatedAt() { return createdAt; } public boolean getRead() { return read; } } 

任何想法,我如何正确地将dataSnapshot.getKey()字符串传递给自定义对象? 我没有在Firebase文档中看到一个示例,并且在更新之前要清楚我正在使用“旧版Firebase”。

DataSnapshot获取Message实例时,您可能正在执行以下操作:

 Message message = snapshot.getValue(Message.class) 

由于这是从getValue() ,因此消息将不包含DataSnapshot的键。

您可以做的是在阅读Message后自己设置密钥:

 Message message = snapshot.getValue(Message.class); message.setKey(snapshot.getKey()); 

在这种情况下,您需要将getKey()标记为@JsonIgnore ,以确保Jackson尝试自动填充或序列化它。

我最后添加了一个静态方法来从DataSnapshot创建对象:

 public static Message FromSnapshot(DataSnapshot snapshot) { Message msg = snapshot.getValue(Message.class); msg.setKey(snapshot.getKey()); return msg; }