我想在firebase 9.2.0+中使用自动值。我有以下代码:
@AutoValue
public abstract class Office {
public static Builder builder() {
return new AutoValue_Office.Builder();
}
public abstract double latitud();
public abstract double longitud();
@AutoValue.Builder
public static abstract class Builder {
public abstract Builder latitud(double latitud);
public abstract Builder longitud(double longitud);
public abstract Office build();
}
}
但是当我打电话给这个Office office = childDataSnapshot.getValue(Office.class);
时,我收到了这个错误:
com.google.firebase.database.DatabaseException: No properties to serialize found on class com.example.app.model.Office
有人知道为什么我会收到此错误以及如何解决它?我读到 firebase 不再jackson
用于 json 序列化。所以我不确定如何指定@JsonProperty("latitud")
我使用@PropertyName
失败的一种。
我还尝试重命名抽象方法public abstract double getLatitud();
,然后错误是下一个:
java.lang.InstantiationException: Can't instantiate abstract class com.example.app.model.Office
所以我不确定如何解决这个问题。
解决方案
感谢hatboysam和Frank van Puffelen,我终于可以通过下一个解决方案来面对这个问题。
- 我基于hatboysam回答和Frank van Puffelen评论创建了一个FirebaseUtil 枚举,其中有两种方法用于序列化和反序列化 Firebase 的对象。
- 我创建了几个
User
和Phone
类进行测试。 依赖项:
compile 'com.fasterxml.jackson.core:jackson-annotations:2.8.0' compile 'com.fasterxml.jackson.core:jackson-databind:2.8.0'
使用示例:
User user = FirebaseUtil.deserialize(dataSnapshot, User.class); Map<String, Object> map = FirebaseUtil.serialize(user);