您好,我正在使用 Firebase 实时数据库开始一个新的 Android 项目。
我的问题是当我创建一条新消息时,我输入了 created_at = ServerValue.TIMESTAMP
这是一个Map<String,String>
.当我获取一条消息时,我收到错误解析,告诉我 created_at
是 long
我把它放在我的模型中的 map 中。我的代码如下:
@IgnoreExtraProperties
public class Message implements Serializable
{
@SerializedName("message_id")
@Expose
private String message_id;
@SerializedName("value")
@Expose
private String value;
@SerializedName("sender")
@Expose
private User sender;
@SerializedName("destination")
@Expose
private User destination;
@SerializedName("chatRoom")
@Expose
private ChatRoom chatRoom;
@SerializedName("created_at")
@Expose
private Map<String,String> created_at;
}
还有我添加新消息的代码:
String idM = databaseReference.push().getKey();
Message m = new Message(idM, message, sender, receiver, chatRoom, ServerValue.TIMESSTAMP);
databaseReference.child(idM).setValue(m);
现在我想像 MySql 一样为 created_at 设置一个默认值:
有什么想法吗?
最佳答案
我在 Lucky 的帮助下解决了这个问题。所以解决方案是:
@IgnoreExtraProperties
public class Message implements Serializable {
@SerializedName("message_id")
@Expose
private String message_id;
@SerializedName("value")
@Expose
private String value;
@SerializedName("sender")
@Expose
private User sender;
@SerializedName("destination")
@Expose
private User destination;
@SerializedName("chatRoom")
@Expose
private ChatRoom chatRoom;
@SerializedName("created_at")
@Expose
private HashMap<String, Object> created_at;
public Message() {
}
public Message(String message_id, String value, User sender, User destination, ChatRoom chatRoom) {
this.message_id = message_id;
this.value = value;
this.sender = sender;
this.destination = destination;
this.chatRoom = chatRoom;
this.created_at = new HashMap<>();
this.created_at.put("date", ServerValue.TIMESTAMP);
}
public String getMessage_id() {
return message_id;
}
public void setMessage_id(String message_id) {
this.message_id = message_id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public User getSender() {
return sender;
}
public void setSender(User sender) {
this.sender = sender;
}
public User getDestination() {
return destination;
}
public void setDestination(User destination) {
this.destination = destination;
}
public ChatRoom getChatRoom() {
return chatRoom;
}
public void setChatRoom(ChatRoom chatRoom) {
this.chatRoom = chatRoom;
}
public HashMap<String, Object> getCreated_at() {
if (created_at != null) {
return created_at;
}
//Otherwise make a new object set to ServerValue.TIMESTAMP
HashMap<String, Object> dateCreatedObj = new HashMap<String, Object>();
dateCreatedObj.put("date", ServerValue.TIMESTAMP);
return dateCreatedObj;
}
@Exclude
public long getDateCreatedLong() {
return (long)created_at.get("date");
}
public void setCreated_at(HashMap<String, Object> created_at) {
this.created_at = created_at;
}
}
关于android - 火力地堡数据库 : How to set default value (Timestamp) to field,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47789965/