Android的firebase 9.0.0 setValue序列化枚举 [英] Android firebase 9.0.0 setValue to serialize enums

查看:138
本文介绍了Android的firebase 9.0.0 setValue序列化枚举的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有这个班利用枚举。解析到Firebase json曾经工作得很好 - 使用Jackson。
当迁移到firebase-database:9.0.0时,我得到以下内容:

lockquote
com.google.firebase.database.DatabaseException :没有属性序列化在类上找到.... MyClass的$ Kind


其中Kind是枚举声明的类型。 class:

  public class MyClass {

public enum Kind {W,V,U};

私人双重价值;
private kind kind;
$ b $ * Dummy构造函数* /
public MyClass(){}
$ b $ public double getValue(){
return value;
}

public void setValue(Double value){
this.value = value;
}

public Kind getKind(){
return kind;
}

public void setKind(Kind kind){
this.kind = kind;






我怀疑Firebase在序列化setValue时不再使用Jackson新的MyClass())。

有没有办法让枚举类型序列化?或者有些方法需要对序列化方法进行明确的说明? 解决方案

您是对的,Firebase数据库不再使用Jackson进行序列化或$反序列化。

您可以通过以下方式将您的枚举表示为字符串:



<$ p $ {code> public class MyClass {

public enum Kind {W,V,U};

私人双重价值;
private kind kind;
$ b $ * Dummy构造函数* /
public MyClass(){}
$ b $ public double getValue(){
return value;
}

public void setValue(Double value){
this.value = value;
}

// Firebase数据映射器将忽略此
@Exclude
public Kind getKindVal(){
return kind;

$ b $ public String getKind(){
//将枚举转换为字符串
if(kind == null){
return null;
} else {
return kind.name();


$ b $ public void setKind(String kindString){
//从字符串获取枚举
if(kindString == null){
this.kind = null;
} else {
this.kind = Kind.valueOf(kindString);
}
}
}


I have this class making use of enums. Parsing to Firebase json used to work just fine - using Jackson. While migrating to firebase-database:9.0.0 I get the following:

com.google.firebase.database.DatabaseException: No properties to serialize found on class .... MyClass$Kind

where Kind is the enum declared type. The class:

public class MyClass {

    public enum Kind {W,V,U};

    private Double value;
    private Kind kind;

    /* Dummy Constructor */
    public MyClass() {}

    public Double getValue() {
        return value;
    }

    public void setValue(Double value) {
        this.value = value;
    }

    public Kind getKind() {
        return kind;
    }

    public void setKind(Kind kind) {
        this.kind = kind;
    }
}

I suspect Firebase no longer uses Jackson when serializing setValue(new MyClass()).

Is there a way to get enum types serialized? Or some means to be explicit with respect to the serializer method?

解决方案

You are right, Firebase Database no longer uses Jackson for serialization or deserialization.

You can represent your enum as a String when talking to Firebase by doing this:

public class MyClass {

    public enum Kind {W,V,U};

    private Double value;
    private Kind kind;

    /* Dummy Constructor */
    public MyClass() {}

    public Double getValue() {
        return value;
    }

    public void setValue(Double value) {
        this.value = value;
    }

    // The Firebase data mapper will ignore this
    @Exclude
    public Kind getKindVal() {
      return kind;
    }

    public String getKind() {
        // Convert enum to string
        if (kind == null) {
          return null;
        } else {
          return kind.name();
        }
    }

    public void setKind(String kindString) {
        // Get enum from string
        if (kindString == null) {
          this.kind = null;
        } else {
          this.kind = Kind.valueOf(kindString);
        }
    }
}

这篇关于Android的firebase 9.0.0 setValue序列化枚举的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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