Firebase: как поместить ключ текущего возвращаемого узла в POJO в качестве поля

#android #firebase #hashmap #firebase-realtime-database

#Android #firebase #hashmap #firebase-realtime-database

Вопрос:

Я надеюсь улучшить название этого вопроса

Предположим, у меня есть следующее.

 abstract class getMessage {
      public getMessage(String k) {
         get(k);
      }

      public abstract void Success(Message message);
      private void get(final String k) {
         DatabaseReference r    = DB.child("chat/messages/"   k);
         r.addListenerForSingleValueEvent(new ValueEventListener(){
            @Override
            public void onDataChange(DataSnapshot d) {
               Message msg = d.getValue(Message.class);
               Success(msg);
            }

            @Override
            public void onCancelled(DatabaseError e) {
               Log.w("Get Message", e.toException());
            }
         });
      }
   }
  

Класс Message имеет поле «messageid», которое должно быть ключом возвращаемого узла, но возвращаемые данные являются дочерними для этого ключа.


Перед этим я вставил поля с :

 Long time         = d.child("time").getValue();
Long String       = d.child("text").getValue();
Long messageid    = d.getKey();
Message message   = new Message(time, messageid, text);
  

Как вы можете видеть выше, я смог взять «messageid» и поместить его в объект Message, но, используя новый подход (первый блок кода), я не знаю, как это сделать.

Возможно ли это?

Редактировать

Класс Message :

 public class Message implements Serializable {
   private String  name;
   private String  msg;
   private String  icon;
   private String  recipient;
   private String  sender;
   private String  shared;
   private Boolean group;
   private Object  time;
   private String  messageid;
   private Boolean local;
   private Boolean delivered;
   private Boolean read;
   private HashMap<String, Boolean> allowed;

   private String file;
   private Boolean attachment;
   private Boolean state;


   public Message(String Name, String Msg, String Recipient, String Sender, String Shared, Boolean Group, String Icon,
                  Object Time, String Messageid, Boolean Local, Boolean Delivered, Boolean Read,
                  HashMap<String, Boolean> Allowed, String File, Boolean Attachment, Boolean State) {
      name = Name;
      msg = Msg;
      recipient = Recipient;
      sender = Sender;
      shared = Shared;
      group = Group;
      time = Time;
      icon = Icon;
      messageid = Messageid;
      local = Local;
      delivered = Delivered;
      read = Read;
      file  = File;
      allowed   = Allowed;
      attachment    = Attachment;
      state         = State;
   }

   public Message() {

   }

   public Boolean getAttachment() {
      return attachment;
   }

   public Boolean getState() {
      return state;
   }

   public HashMap<String, Boolean> getAllowed() {
      return allowed;
   }

   public String getFile() {
      return file;
   }

   public Boolean getDelivered() {
      return delivered;
   }

   public Boolean getRead() {
      return read;
   }

   public Boolean getLocal() {
      return local;
   }

   public String getMessageid() {
      return messageid;
   }

   public String getName() {
      return name;
   }

   public Object getTime() {
      return time;
   }

   public String getMsg() {
      return msg;
   }

   public Boolean getGroup() {
      return group;
   }

   public String getRecipient() {
      return recipient;
   }

   public String getSender() {
      return sender;
   }

   public String getShared() {
      return shared;
   }

   public String getIcon() {
      return icon;
   }
}
  

Комментарии:

1. можете ли вы опубликовать свой Message класс? DataSnapshot.getKey() возвращает строку, поэтому довольно странно, что вы можете это сделать Long messageid = d.getKey();

2. @Wilik это немного длинновато, извиняюсь, но поставлю его только сейчас.

Ответ №1:

Вы можете сделать это, добавив Message в класс установщик, а затем вызвать этот метод для установки ключа.

 public void setMessageid(String messageId) {
    this.messageid = messageId;
}
  

внутри onDataChange метода

 Message msg = d.getValue(Message.class);
msg.setMessageId(d.getKey());
Success(msg);