rma*_*rau 14 android firebase firebase-realtime-database
我有这个课程使用枚举.解析Firebase json曾经工作得很好 - 使用杰克逊.迁移到firebase-database时:9.0.0我得到以下内容:
com.google.firebase.database.DatabaseException:没有在类上找到的序列化属性.... MyClass $ Kind
Kind是枚举声明的类型.班级:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
我怀疑Firebase在序列化setValue(新的MyClass())时不再使用Jackson.
有没有办法让枚举类型序列化?或者某些方法是明确的序列化方法?
Sam*_*ern 17
你是对的,Firebase数据库不再使用Jackson进行序列化或反序列化.
通过这样做,您可以在与Firebase交谈时将您的枚举表示为字符串:
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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
作为一个侧面的优化答案在Android中,建议不要使用Enums。使用@StringDef 或@IntDef,它可以在没有变通方法的情况下工作,并且您优化了应用程序的内存。
非常好的视频推理原因:https : //www.youtube.com/watch?v=Hzs6OBcvNQE
| 归档时间: |
|
| 查看次数: |
4497 次 |
| 最近记录: |