@Entity
data class Products(
val id:String,
val title: String,
val description: String,
val imgUrl: String,
val usageRules : List<String>, //what happens here?
)
我正在玩Android的ROOM,我见过的大部分示例都没有解释如何创建一个包含arrayList的Entity表。
有@Embedded似乎只嵌套另一个对象,但我试图嵌套一个名为usageRules的对象列表
我是否需要创建单独的使用规则表?问题是,每个使用规则都可以包含在上面的多个产品中,并且产品可以定义多个使用规则,因此它是多对多关系。
这可以用ROOM吗?
我知道在Realm中我可以简单地转换UsageRule列表&lt;&gt;到RealmList&lt;&gt ;.房间里有相应的东西吗?
另一种选择是,因为它只是一个字符串。我可以简单地创建一个名为allUsage的新表实体字段,该字段使用分隔符存储特定产品上的所有usageRules,然后当我想从ROOM再次构造数据对象时,我可以通过执行allUsage.Split(.. )
还是宁愿这样做,因为我可能会遇到一个情节,其中usageRules不仅仅是一个字符串列表,而是一个对象列表......
答案 0 :(得分:0)
尝试使用ArrayList:-
ISBN:
需要为此使用转换器:-
@Entity
data class Products(
val id:String,
val title: String,
val description: String,
val imgUrl: String,
val usageRules : ArrayList<String>, //what happens here?
)
并在此处定义转换器:-
class Converters {
companion object {
@TypeConverter
@JvmStatic
fun fromString(value: String): ArrayList<String>? {
val listType = object : TypeToken<ArrayList<String>>() {}.type
return Gson().fromJson(value, listType)
}
@TypeConverter
@JvmStatic
fun fromArrayList(list: ArrayList<String>?): String {
val gSon = Gson()
return gSon.toJson(list)
}
}
}
一个额外的实现需求:-
@Database(entities = [TableModel::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class RDatabase : RoomDatabase() {
abstract val tableDAO: TableDAO
}
我的代码与此完美配合