Android 嵌入式列表-如何? @实体 数据类产品( valid:String, val标题:字符串, val说明:字符串, val imgUrl:String, val usageRules:List,//这里发生了什么? )

Android 嵌入式列表-如何? @实体 数据类产品( valid:String, val标题:字符串, val说明:字符串, val imgUrl:String, val usageRules:List,//这里发生了什么? ),android,android-room,android-architecture-components,android-jetpack,Android,Android Room,Android Architecture Components,Android Jetpack,我在玩ROOM for android,我看到的大多数示例都没有解释如何创建一个包含arrayList的实体表 有一个@Embedded,它似乎只嵌套了另一个对象,但我正在尝试嵌套一个名为usageRules的对象列表 我需要创建一个单独的使用规则表吗?问题是,每个使用规则可以包含在上面的多个产品中,而且一个产品可以定义多个使用规则,因此它是一个多对多关系 这有房间吗 我知道在Realm中,我可以简单地将UsageRule列表转换为RealmList。房间里有同等物品吗 另一种选择是,因为它只是

我在玩ROOM for android,我看到的大多数示例都没有解释如何创建一个包含arrayList的实体表

有一个@Embedded,它似乎只嵌套了另一个对象,但我正在尝试嵌套一个名为usageRules的对象列表

我需要创建一个单独的使用规则表吗?问题是,每个使用规则可以包含在上面的多个产品中,而且一个产品可以定义多个使用规则,因此它是一个多对多关系

这有房间吗

我知道在Realm中,我可以简单地将UsageRule列表转换为RealmList。房间里有同等物品吗

另一种选择是,因为它只是一个字符串列表。我可以简单地创建一个名为allUsage的新表实体字段,该字段使用分隔符存储特定产品上的所有usageRules,然后,当我想从文件室再次构建数据对象时,我可以通过执行allUsage.Split(..)来获取其内容

我还是希望用另一种方式来做,因为我可能会遇到这样的场景:usageRules不仅仅是一个字符串列表,而是一个对象列表……

尝试使用ArrayList:-

@Entity
data class Products(
        val id:String,
        val title: String,
        val description: String,
        val imgUrl: String,
        val  usageRules : List<String>,  //what happens here?
)
一个额外的实施需要:-

@Database(entities = [TableModel::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class RDatabase : RoomDatabase() {
    abstract val tableDAO: TableDAO
}

我的代码通过这个

工作得很好。更好的方法是使用外键将用法列表存储在另一个表中。我就是这样做的是的,而且很有效。给你更多的控制权。上面的方法很好,但是没有给你太多的灵活性,如果使用列表很大,需要分页怎么办
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
}
implementation 'com.google.code.gson:gson:2.8.5'