gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 13:24:12 31 4
gpt4 key购买 nike

可以将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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com