jon*_*ney 5 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?
)
Run Code Online (Sandbox Code Playgroud)
我正在玩 ROOM for android,我看到的大多数示例都没有解释如何创建一个包含 arrayList 的实体表。
有 @Embedded 似乎只嵌套另一个对象,但我试图嵌套一个名为 usageRules 的对象列表
我需要创建一个单独的使用规则表吗?问题是,每个使用规则都可以包含在上面的多个产品中,并且一个产品可以定义多个使用规则,因此它是多对多的关系。
ROOM 可以实现吗?
我知道在 Realm 中,我可以简单地将 UsageRule List<> 转换为 RealmList<>。ROOM 有等价物吗?
另一种选择是因为它只是一个字符串列表。我可以简单地创建一个名为 allUsage 的新表实体字段,该字段使用分隔符存储特定产品上的所有使用规则,然后当我想再次从 ROOM 构造数据对象时,我可以通过执行 allUsage.Split(.. )
仍然宁愿用另一种方式来做,因为我可能会遇到一个场景,其中使用规则不仅仅是一个字符串列表,而是一个对象列表......
尝试使用 ArrayList:-
@Entity
data class Products(
val id:String,
val title: String,
val description: String,
val imgUrl: String,
val usageRules : ArrayList<String>, //what happens here?
)
Run Code Online (Sandbox Code Playgroud)
为此需要使用转换器:-
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
并在此处定义转换器:-
@Database(entities = [TableModel::class], version = 1, exportSchema = false)
@TypeConverters(Converters::class)
abstract class RDatabase : RoomDatabase() {
abstract val tableDAO: TableDAO
}
Run Code Online (Sandbox Code Playgroud)
一项额外的实施需要:-
implementation 'com.google.code.gson:gson:2.8.5'
Run Code Online (Sandbox Code Playgroud)
我的代码可以完美地工作
| 归档时间: |
|
| 查看次数: |
185 次 |
| 最近记录: |