Android房间:在实体中保存枚举



我正在尝试将枚举值存储在Android上的Room数据库中。然而,当实体从我们的API获取并试图保存到DB时,我得到了一个空指针异常。我已经尝试过用@Typeconverters注释来注释Database类和Entity类。

我的实体类如下:

@Entity
@TypeConverters(SalesOrderStatusConverter::class)
data class SalesOrder(
@PrimaryKey val id: Int,
...
var salesOrderStatus: SalesOrderStatus,
...
)

在同一文件中使用枚举类和转换器:

enum class SalesOrderStatus(value: Int) {
UNPACKED(0),
PACKED(1),
SHIPPED(2),
EXPORT(3)
}
class SalesOrderStatusConverter {
@TypeConverter
fun toSalesOrderStatus(value: Int): SalesOrderStatus = enumValues<SalesOrderStatus>()[value]
@TypeConverter
fun fromSalesOrderStatus(value: SalesOrderStatus): Int = value.ordinal
}

当我导航到应用程序中的适当片段时,我会收到以下错误消息,从API提取数据并尝试保存后,应用程序崩溃:

java.lang.NullPointerException:指定为非null的参数为null:方法kotlin.jvm.internal.Intrinsics.checkNotNullParameter,参数值网址:com.android.sampleappname.data.model.SalesOrderStatusConverter.fromSalesOrderStatus(未知来源:2(

当我将var salesOrderStatus: SalesOrderStatus更改为var salesOrderStatus: Int时,一切如常。

我在这里做错了什么?

在转换器类上添加注释@ProviderTypeConverter,如下所示:

@ProvidedTypeConverter
class SalesOrderStatusConverter {
@TypeConverter
fun toSalesOrderStatus(value: Int): SalesOrderStatus = enumValues<SalesOrderStatus>()[value]
@TypeConverter
fun fromSalesOrderStatus(value: SalesOrderStatus): Int = value.ordinal
}

并从您的数据类中删除SalesOrder

最新更新