Firebase数据库将int序列化为枚举?

时间:2017-10-04 13:44:23

标签: firebase-realtime-database enums kotlin

可以将int / long序列化为枚举吗? 以前我的模型是这样的:

class A(var style: Int = STYLE_NORMAL) : Parcelable, Observable{...}

样式值可以是

const val STYLE_NORMAL : Int = 0 

const val STYLE_CUSTOM : Int = 1

现在我决定用enum包装它会更好。

enum class Style {
    @SerializedName("0") NORMAL,
    @SerializedName("1") CUSTOM
}

所以我的模型现在看起来像这样:

class A(var style: Style = Style.NORMAL) : Parcelable, Observable{...}

一切正常,但Firebase无法将之前模型中已存储的对象解析为新的对象,而且这一行

snapshot.getValue(A::java.class)

抛出异常

  

E / UncaughtException:com.google.firebase.database.DatabaseException:   预期字符串,而反序列化为枚举类   com.stasbar.models.A $ Style但得到了一个java.lang.Long类

我了解问题是Firebase只能将字符串解析为枚举。 有没有解决方法?

1 个答案:

答案 0 :(得分:2)

目前我正在使用使用@IntDef注释而不是枚举的解决方法。但我会继续提出问题解决方案

@Retention(AnnotationRetention.SOURCE)
@IntDef(Style.NORMAL, Style.CUSTOM)
annotation class StyleDef


object Style {
    const val NORMAL: Long = 0
    const val CUSTOM: Long = 1
}

我的模特成了

class A(@StyleDef var style: Long = Style.NORMAL) : Parcelable, Observable{...}