6
@Entity
data class Products(
        val id:String,
        val title: String,
        val description: String,
        val imgUrl: String,
        val  usageRules : List<String>,  //what happens here?
)

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

@Embedded 似乎只嵌套了另一个对象,但我试图嵌套一个名为 usageRules 的对象列表

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

ROOM 可以吗?

我知道在 Realm 中,我可以简单地将 UsageRule List<> 转换为 RealmList<>。ROOM 中是否有等价物?

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

仍然宁愿以另一种方式做,因为我可能会遇到这样一个场景,其中 usageRules 不仅仅是一个字符串列表,而是一个对象列表......

4

1 回答 1

0

尝试使用 ArrayList:-

@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
}

一项额外的实施需要:-

implementation 'com.google.code.gson:gson:2.8.5'

我的代码完全可以通过这个工作

于 2019-02-01T09:09:45.390 回答