我正在尝试使用Firebase Android和一些简单的POJO,但即使使用以下示例代码我也会遇到一些例外
final Firebase fb = getFirebaseAccess();
final Subscription subscription = new Subscription(url, System.currentTimeMillis());
Firebase subscriptionRef = fb.child("subscriptions").push();
subscriptionRef.setValue(subscription); // exception thrown here
// Subscription.java
public class Subscription {
private String url;
private long subscribedAt;
public Subscription() {
}
public Subscription(String url, long subscribedAt) {
this.url = url;
this.subscribedAt = subscribedAt;
}
public String getUrl() {
return this.url;
}
public void setUrl(String url) {
this.url = url;
}
public long getSubscribedAt() {
return this.subscribedAt;
}
public void setSubscribedAt(long subscribedAt) {
this.subscribedAt = subscribedAt;
}
}
抛出以下异常:
无法解析为快照 com.fasterxml.jackson.databind.JsonMappingException:没有为类com.mypackage.Subscription找到序列化程序,也没有发现创建BeanSerializer的属性(为了避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS)) 没有找到类com.myPackage.Subscription的序列化程序,也没有发现创建BeanSerializer的属性(为了避免异常,请禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))
我不明白什么是失败的,因为我保留了公共默认构造函数,并且每个变量都有自己的公共getter ......
有什么想法吗?
顺便说一句,如果我用字符串字段或属性映射替换POJO,它可以正常工作
编辑: 我正在使用Proguard启用minify。 我有以下说明:
# Firebase 2.0
# keep POJOs
-keepnames class com.myPackage.** { *; }
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.w3c.dom.**
-dontwarn org.joda.time.**
-dontwarn org.shaded.apache.**
-dontwarn org.ietf.jgss.**
答案 0 :(得分:0)
看起来杰克逊相关文件正在通过Proguard删除,尝试使用以下Proguard配置:
# Proguard configuration for Jackson 2.x (fasterxml package instead of codehaus package)
-keep class com.fasterxml.jackson.databind.ObjectMapper {
public <methods>;
protected <methods>;
}
-keep class com.fasterxml.jackson.databind.ObjectWriter {
public ** writeValueAsString(**);
}
# Basic ProGuard rules for Firebase Android SDK 2.0.0+
-keep class com.firebase.** { *; }
-keep class org.apache.** { *; }
-keepnames class com.fasterxml.jackson.** { *; }
-keepnames class javax.servlet.** { *; }
-keepnames class org.ietf.jgss.** { *; }
-dontwarn org.apache.**
-dontwarn org.w3c.dom.**
# Facebook
-keep class com.facebook.** {*;}
-keepattributes Signature
# Firebase UI
-dontwarn com.firebase.ui.auth.twitter.**