我正在尝试将枚举值存储在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