【问题标题】:Obtaining the reference and key in Custom Object Firebase Android获取自定义对象 Firebase Android 中的引用和密钥
【发布时间】:2016-08-09 20:52:52
【问题描述】:

我希望将每个特定对象的 dataSnapshot 和键的引用传递到自定义“消息”对象中。

我尝试在 Message.class 中使用键“字符串键”,但它似乎返回为空。

这是我的 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”。

【问题讨论】:

    标签: java android firebase firebase-realtime-database


    【解决方案1】:

    当您从DataSnapshot 获得Message 实例时,您可能会这样做:

    Message message = snapshot.getValue(Message.class)
    

    由于这是从getValue() 开始的,所以消息中不会包含DataSnapshot 的密钥。

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

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

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

    【讨论】:

    • 如果我想为复杂 JSON 树中的每个对象设置键,该怎么做?
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2016-08-11
      • 2021-07-14
      • 2020-04-26
      • 1970-01-01
      • 2018-01-02
      • 2012-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多