firebase-realtime-database - Firebase 数据库将 int 序列化为枚举?

标签 firebase-realtime-database enums kotlin

是否可以将 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: Expected a String while deserializing to enum class com.stasbar.models.A$Style but got a class java.lang.Long

我知道问题在于 Firebase 只能将字符串解析为枚举。 有什么解决办法吗?

最佳答案

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

关于firebase-realtime-database - Firebase 数据库将 int 序列化为枚举?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46566509/

相关文章:

与枚举相关的 C++ LNK2005 错误

java - 将 null 设置为 Dagger Singleton 对象

ios - 如何设置 Firebase 规则/[FirebaseDatabase] 使用未指定的索引

ios - 当应用程序处于后台时,在内存中保留一个 Firebase 监听器

java - Firebase 数据库查询返回错误结果

ios - 如何正确构建 Firebase 数据库以方便读取和删除

nhibernate - 枚举解析似乎不适用于 Fluent NHibernate

ios - 在类型中找不到枚举大小写开关

android - 从列表中设置ContentView (Kotlin)

kotlin - 在 Kotlin 中增加一个整数 Map 值