【问题标题】:Firebase Database serialize int to enum?Firebase数据库将int序列化为枚举?
【发布时间】:2019-03-20 01:15:03
【问题描述】:

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

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

样式值可以是其中一个

const val STYLE_NORMAL : Int = 0 

const val STYLE_CUSTOM : Int = 1

现在我决定用枚举包裹它会更好。

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 只能将字符串解析为枚举。 有什么解决办法吗?

【问题讨论】:

    标签: firebase-realtime-database enums kotlin


    【解决方案1】:

    现在我正在使用使用@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{...}
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-10-15
      • 1970-01-01
      • 2016-10-16
      • 2015-11-11
      相关资源
      最近更新 更多