[英]How can I save a List<Int> in an Entity?
我正在保存一个看起来像这样的实体
@Entity
data class Entity(
@PrimaryKey val id: Int,
val productPresentationList: List<Int>,
val supplierComparePriceList: List<SupplierComparePrice>
)
而且,当我运行该应用程序时,我收到了此错误消息
com.google.gson.JsonSyntaxException: java.lang.IllegalStateException: Expected an int but was BEGIN_OBJECT at line 1 column 3 path $[0]
at com.google.gson.Gson.fromJson(Gson.java:975)
at com.google.gson.Gson.fromJson(Gson.java:928)
at com.google.gson.Gson.fromJson(Gson.java:877)
at com.yopdev.wabi2b.db.Converters.restoreProductPresentation(Converters.kt:162)
at com.yopdev.wabi2b.db.dao.CartDao_Impl$6.call(CartDao_Impl.java:281)
at com.yopdev.wabi2b.db.dao.CartDao_Impl$6.call(CartDao_Impl.java:262)
at androidx.room.CoroutinesRoom$Companion$createFlow$1$1$1.invokeSuspend(CoroutinesRoom.kt:128)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:106)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:919)
所以,在那之后我尝试使用这样的转换器
@TypeConverter
fun restoreProductPresentation(listOfString: String): List<Int> =
Gson().fromJson(listOfString, object : TypeToken<List<Int>>() {}.type)
@TypeConverter
fun saveProductPresentation(list: List<Int>): String =
Gson().toJson(list)
不幸的是,这也不起作用。
我怎样才能做到这一点?
先谢谢了。
您不能直接将列作为列表/数组。 但是,您可以使用“持有人”object 和 TypeConverter 来存储转换后的列表/数组的列。
因此,例如,您可以:-
data class MyListHolder(
val myList: List<Int>
)
然后有实体:-
@Entity
data class Entity(
@PrimaryKey val id: Int,
val productPresentationList: MyListHolder,
val supplierComparePriceList: List<SupplierComparePrice>
)
以及将 List 转换为实体可接受的类型的 TypeConverters。 通常是 JSON 字符串,例如
@TypeConverter
fun fromMyListHolder(mlh: MyListHolder): String {
return Gson().toJson(mlh)
}
@TypeConverter
fun toStatesHolder(mlh: String): MyListHolder {
return Gson().fromJson(mlh,MyListHolder::class.java)
}
笔记。 因为你有val supplierComparePriceList: List<SupplierComparePrice>
那么你需要以类似的方式处理这个问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.