更新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 –