Android firebase 9.0.0 setValue 序列化枚举
Android firebase 9.0.0 setValue to serialize enums
我有这个 class 使用枚举。解析到 Firebase json 曾经工作得很好 - 使用 Jackson。
迁移到 firebase-database:9.0.0 时,我得到以下信息:
com.google.firebase.database.DatabaseException: No properties to serialize found on class .... MyClass$Kind
其中 Kind 是枚举声明类型。 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;
}
}
我怀疑 Firebase 在序列化 setValue(new MyClass()) 时不再使用 Jackson。
有没有办法让枚举类型序列化?或者一些明确说明序列化程序方法的方法?
没错,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);
}
}
}
作为一个侧面优化的答案
在Android中,建议不要使用Enums。使用@StringDef 或@IntDef,它可以在没有解决方法的情况下工作,并且您针对内存优化了您的应用程序。
非常好的视频推理原因:https://www.youtube.com/watch?v=Hzs6OBcvNQE
我有这个 class 使用枚举。解析到 Firebase json 曾经工作得很好 - 使用 Jackson。 迁移到 firebase-database:9.0.0 时,我得到以下信息:
com.google.firebase.database.DatabaseException: No properties to serialize found on class .... MyClass$Kind
其中 Kind 是枚举声明类型。 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;
}
}
我怀疑 Firebase 在序列化 setValue(new MyClass()) 时不再使用 Jackson。
有没有办法让枚举类型序列化?或者一些明确说明序列化程序方法的方法?
没错,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);
}
}
}
作为一个侧面优化的答案 在Android中,建议不要使用Enums。使用@StringDef 或@IntDef,它可以在没有解决方法的情况下工作,并且您针对内存优化了您的应用程序。
非常好的视频推理原因:https://www.youtube.com/watch?v=Hzs6OBcvNQE