嵌入式列表 - 如何?

时间:2018-02-15 17:20:35

标签: android android-room android-architecture-components android-jetpack

@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不仅仅是一个字符串列表,而是一个对象列表......

1 个答案:

答案 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
}

我的代码与此完美配合