firebase:InstantiationException:无法实例化抽象 class java.util.TimeZone
firebase: InstantiationException: Can't instantiate abstract class java.util.TimeZone
我尝试从这样的 firebase 数据库中解析 EventPojo
-类 的列表:
GenericTypeIndicator<HashMap<String, EventPojo>> tEvents = new GenericTypeIndicator<HashMap<String, EventPojo>>() {};
HashMap<String, EventPojo> events = dataSnapshot.child(getString(R.string.eventsNodeName)).getValue(tEvents);
在 EventPojo
我有一个 GregorianCalender
:
public class EventPojo implements Comparable<EventPojo>{
GregorianCalendar date;
...
当我尝试从数据库获取 HashMap 时,我得到一个 InstantiationException
:
java.lang.RuntimeException: java.lang.InstantiationException: Can't instantiate abstract class java.util.TimeZone
为什么 firebase 试图实例化 TimeZone
而不是 GregorianCalender
?
Firebase 实时数据库仅存储 JSON 类型。如果不编写自定义代码,就无法 serialize/deserialize a GregorianCalendar
(或 TimeZone
)。
我的典型做法是有一个JSON类型的属性(例如,一个Long
来存储时间戳),然后有一个getter returns 应用程序使用的类型(因此在您的情况下为 GregorianCalendar
)。为确保 Firebase 不会尝试序列化 GregorianCalendar
方法,请将其标记为 @Exclude
(also see: How to ignore new fields for an object model with Firebase 1.0.2 以获取一些示例)。
所以:
public class EventPojo implements Comparable<EventPojo>{
public Long timestamp
@Exclude
public GregorianCalendar getDate() {
...
}
@Exclude
public void getDate(GregorianCalendar date) {
...
}
...
有了这个,Firebase 将看到 timestamp
字段并从中读取它并将其写入数据库,而您的代码只与 getDate()
和 setDate()
.[=21 交互=]
我尝试从这样的 firebase 数据库中解析 EventPojo
-类 的列表:
GenericTypeIndicator<HashMap<String, EventPojo>> tEvents = new GenericTypeIndicator<HashMap<String, EventPojo>>() {};
HashMap<String, EventPojo> events = dataSnapshot.child(getString(R.string.eventsNodeName)).getValue(tEvents);
在 EventPojo
我有一个 GregorianCalender
:
public class EventPojo implements Comparable<EventPojo>{
GregorianCalendar date;
...
当我尝试从数据库获取 HashMap 时,我得到一个 InstantiationException
:
java.lang.RuntimeException: java.lang.InstantiationException: Can't instantiate abstract class java.util.TimeZone
为什么 firebase 试图实例化 TimeZone
而不是 GregorianCalender
?
Firebase 实时数据库仅存储 JSON 类型。如果不编写自定义代码,就无法 serialize/deserialize a GregorianCalendar
(或 TimeZone
)。
我的典型做法是有一个JSON类型的属性(例如,一个Long
来存储时间戳),然后有一个getter returns 应用程序使用的类型(因此在您的情况下为 GregorianCalendar
)。为确保 Firebase 不会尝试序列化 GregorianCalendar
方法,请将其标记为 @Exclude
(also see: How to ignore new fields for an object model with Firebase 1.0.2 以获取一些示例)。
所以:
public class EventPojo implements Comparable<EventPojo>{
public Long timestamp
@Exclude
public GregorianCalendar getDate() {
...
}
@Exclude
public void getDate(GregorianCalendar date) {
...
}
...
有了这个,Firebase 将看到 timestamp
字段并从中读取它并将其写入数据库,而您的代码只与 getDate()
和 setDate()
.[=21 交互=]