未能将简单的POJO写入Firebase(Android) [英] Failure to write a simple POJO to Firebase (Android)

查看:404
本文介绍了未能将简单的POJO写入Firebase(Android)的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图用一些简单的POJO来使用Firebase Android,但即使使用下面的示例代码,我也会遇到一些异常:

  final Firebase fb = getFirebaseAccess(); 
final订阅订阅=新订阅(url,System.currentTimeMillis());
Firebase subscriptionRef = fb.child(subscriptions)。push();
subscriptionRef.setValue(subscription); //抛出的异常

// Subscription.java

  public class Subscription {

private String url;
私人长期订阅;
$ b $ public订阅(){
}

公共订阅(字符串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;


$ / code $ / pre
$ b $ p

引发以下异常:


无法解析到快照
com.fasterxml.jackson.databind.JsonMappingException:找不到类com.mypackage的序列化程序。创建BeanSerializer(避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))
没有发现类com.myPackage.Subscription的序列化程序,也没有发现创建BeanSerializer的属性(以避免异常,禁用SerializationFeature.FAIL_ON_EMPTY_BEANS))


我不明白什么是失败的,因为我保留了公共的默认构造函数,并且每个变量都有它自己的公共getter ...



任何想法?



顺便说一句,如果我用一个字符串字段或属性映射替换POJO它的工作正常



编辑:
我正在使用Proguard启用缩小。
我有以下指示:

 #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。**


解决方案

文件正在通过Proguard删除,请尝试以下Proguard配置:

pre $ #对于Jackson 2.x的Proguard配置(更快的xml包codehaus包)

-keep class com.fasterxml.jackson.databind.ObjectMapper {
public< methods> ;;
保护<方法>;

-keep class com.fasterxml.jackson.databind.ObjectWriter {
public ** writeValueAsString(**);
}

#Firebase的基本ProGuard规则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签名

#Firebase UI

-twtwarn com.firebase.ui.auth.twitter。**


I'm trying to use Firebase Android with some simple POJO but I'm getting some exceptions even with the following sample code

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;
        }
    }

The following exception is thrown:

Failed to parse to snapshot com.fasterxml.jackson.databind.JsonMappingException: No serializer found for class com.mypackage.Subscription and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) ) No serializer found for class com.myPackage.Subscription and no properties discovered to create BeanSerializer (to avoid exception, disable SerializationFeature.FAIL_ON_EMPTY_BEANS) )

I don't understand what's failing because I kept the public default constructor and every variable has its own public getter...

Any idea ?

BTW if I replace the POJO with a String field or a map of attributes it works fine

Edit: I'm using Proguard with minify enabled. I have the following instructions:

# 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.**

解决方案

Looks like Jackson related files are being deleted via Proguard, try with the following Proguard Configuration:

    # 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.**

这篇关于未能将简单的POJO写入Firebase(Android)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆