更新2016年12月27日
切换出@JsonIgnore为@Exclude如许多人提及。
我终于想出了一个用于处理日期和ServerValue.TIMESTAMP的灵活解决方案。这是从Ivan V,Ossama和puf的例子。
我无法想出一个办法来对付long
和HashMap<String, String>
之间的转换,但如果你窝在一个更通用的HashMap<String, Object>
财产可以进入数据库,可作为单一的长值(“日期”, “1443765561874”)或作为ServerValue.TIMESTAMP
哈希映射(“date”,{“.sv”,“servertime”})。然后当你把它拉出来时,它总是一个带有(“date”,“some long number”)的HashMap。然后,您可以在POJO类中使用 @JsonIgnore @Exclude注解(意味着Firebase会忽略它,并且不会将其视为序列化到/从数据库序列化的方法)在辅助方法中轻松地从返回的值中获取长整型值HashMap在您的应用程序中使用。一个POJO类的
全部例子如下:
import com.google.firebase.database.Exclude;
import com.firebase.client.ServerValue;
import java.util.HashMap;
import java.util.Map;
public class ExampleObject {
private String name;
private String owner;
private HashMap<String, Object> dateCreated;
private HashMap<String, Object> dateLastChanged;
/**
* Required public constructor
*/
public ExampleObject() {
}
public ExampleObject(String name, String owner, HashMap<String,Object> dateCreated) {
this.name = name;
this.owner = owner;
this.dateCreated = dateCreated;
//Date last changed will always be set to ServerValue.TIMESTAMP
HashMap<String, Object> dateLastChangedObj = new HashMap<String, Object>();
dateLastChangedObj.put("date", ServerValue.TIMESTAMP);
this.dateLastChanged = dateLastChangedObj;
}
public String getName() {
return name;
}
public String getOwner() {
return owner;
}
public HashMap<String, Object> getDateLastChanged() {
return dateLastChanged;
}
public HashMap<String, Object> getDateCreated() {
//If there is a dateCreated object already, then return that
if (dateCreated != null) {
return dateCreated;
}
//Otherwise make a new object set to ServerValue.TIMESTAMP
HashMap<String, Object> dateCreatedObj = new HashMap<String, Object>();
dateCreatedObj.put("date", ServerValue.TIMESTAMP);
return dateCreatedObj;
}
// Use the method described in https://stackoverflow.com/questions/25500138/android-chat-crashes-on-datasnapshot-getvalue-for-timestamp/25512747#25512747
// to get the long values from the date object.
@Exclude
public long getDateLastChangedLong() {
return (long)dateLastChanged.get("date");
}
@Exclude
public long getDateCreatedLong() {
return (long)dateCreated.get("date");
}
}
查看http://stackoverflow.com/questions/25500138/android-chat-crashes-on-datasnapshot-getvalue-for-timestamp/25512747#25512747 –