#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);