如何在实体领域 class Room kotlin 中的 parcelabel 对象的可变列表中创建一个 aotuGenerated 字段
how to make an aotuGenerated field in a mutableList of parcelabel object in a feild of entity class Room kotlin
我有一个实体 class (PipeLine),它有一个可变的 parcelabel class (DamagePoint) 列表
主 class PipeLine 有一个字段 val id:Int=0,
primary key 设置为 autoGerat=true 它工作正常
subclass DamagePoint 也有一个主键val no:Int=1,
我用它来做点序列它不工作!!
生成的所有点都有 no=0
澄清一下,每个 PipeLine 都有一个 DamagePoints 列表,按数字排序
我该怎么做!!
classPipeLine.kt
@Parcelize
@Entity(tableName = "table_Lines")
data class PipeLine(
@PrimaryKey(autoGenerate = true)
val id:Int=0,
var name: String?,
var ogm: String?,
var length: String?,
var type: String?,
var i_start: String?,
var i_end: String?,
var start_point: String?,
var end_point: String?,
var work_date:String?,
var points: MutableList<DamagePoint>
):Parcelable
@Parcelize
data class DamagePoint(
@PrimaryKey(autoGenerate = true)
val no:Int=1,
var db: String? = null,
var depth: String? = null,
var current1: String? = null,
var current2: String? = null,
var gps_x: String? = null,
var gps_y: String? = null
):Parcelable
class DataConverter {
@TypeConverter
fun fromPoints(points: MutableList<DamagePoint>?): String? {
if (points == null) {
return null
}
val gson = Gson()
val type = object : TypeToken<MutableList<DamagePoint>?>() {}.type
return gson.toJson(points, type)
}
@TypeConverter
fun toPoints(points: String?): MutableList<DamagePoint>? {
if (points == null) {
return null
}
val gson = Gson()
val type = object : TypeToken<MutableList<DamagePoint>?>() {}.type
return gson.fromJson<MutableList<DamagePoint>>(points, type)
}
}
输出:
管道工作和增加的 id
否,因为 DamagePoint 不起作用并且没有增加
模拟器的另一个输出显示点列表 int recyclerView
是主键在类型转换器中不起作用
或者有另一种方法可以让它增加吗?
请任何帮助
我用@PrimaryKey注解并设置autoGenerate为true
试图在 val 和 var 之间切换,同样的事情
问题出在您为 no
设置的 1
整数上。这样,它就不会像 auto-increment 那样工作,因为有一个指定的整数值 (1
) 而不是 0
.
所以这意味着如果您将 no
设置为 0
,它将像未设置的那样工作并增加值。
val no:Int = 0
此外,您可能需要将 no
名称更改为 id
。
问题是每次我想在 PipeLine 实体中的点列表中添加一个点时,我都试图添加完整的 DamagePoint 列表,所以我从对象中获取列表,向其添加新点并更新该管道对象的整个列表,因此找到所有点 (no) 等于 1 是正常的,因为它是它的默认值
现在我处理我添加到列表中的每个点的编号,然后再更新它并将其添加回管道对象
我找到了一种只更新管道对象中的点列表而不更新整个对象的方法
@Query("UPDATE table_Lines SET points=:points WHERE id=:id ")
有趣的 updatePointsList(id:Int,points:MutableList)
如果有人知道如何将项目添加到作为实体 属性 的可变列表 class
无需更新列表或更新实体对象
请添加答案
我有一个实体 class (PipeLine),它有一个可变的 parcelabel class (DamagePoint) 列表
主 class PipeLine 有一个字段 val id:Int=0,
primary key 设置为 autoGerat=true 它工作正常
subclass DamagePoint 也有一个主键val no:Int=1,
我用它来做点序列它不工作!!
生成的所有点都有 no=0
澄清一下,每个 PipeLine 都有一个 DamagePoints 列表,按数字排序
我该怎么做!!
classPipeLine.kt
@Parcelize
@Entity(tableName = "table_Lines")
data class PipeLine(
@PrimaryKey(autoGenerate = true)
val id:Int=0,
var name: String?,
var ogm: String?,
var length: String?,
var type: String?,
var i_start: String?,
var i_end: String?,
var start_point: String?,
var end_point: String?,
var work_date:String?,
var points: MutableList<DamagePoint>
):Parcelable
@Parcelize
data class DamagePoint(
@PrimaryKey(autoGenerate = true)
val no:Int=1,
var db: String? = null,
var depth: String? = null,
var current1: String? = null,
var current2: String? = null,
var gps_x: String? = null,
var gps_y: String? = null
):Parcelable
class DataConverter {
@TypeConverter
fun fromPoints(points: MutableList<DamagePoint>?): String? {
if (points == null) {
return null
}
val gson = Gson()
val type = object : TypeToken<MutableList<DamagePoint>?>() {}.type
return gson.toJson(points, type)
}
@TypeConverter
fun toPoints(points: String?): MutableList<DamagePoint>? {
if (points == null) {
return null
}
val gson = Gson()
val type = object : TypeToken<MutableList<DamagePoint>?>() {}.type
return gson.fromJson<MutableList<DamagePoint>>(points, type)
}
}
输出:
模拟器的另一个输出显示点列表 int recyclerView
是主键在类型转换器中不起作用 或者有另一种方法可以让它增加吗? 请任何帮助
我用@PrimaryKey注解并设置autoGenerate为true 试图在 val 和 var 之间切换,同样的事情
问题出在您为 no
设置的 1
整数上。这样,它就不会像 auto-increment 那样工作,因为有一个指定的整数值 (1
) 而不是 0
.
所以这意味着如果您将 no
设置为 0
,它将像未设置的那样工作并增加值。
val no:Int = 0
此外,您可能需要将 no
名称更改为 id
。
问题是每次我想在 PipeLine 实体中的点列表中添加一个点时,我都试图添加完整的 DamagePoint 列表,所以我从对象中获取列表,向其添加新点并更新该管道对象的整个列表,因此找到所有点 (no) 等于 1 是正常的,因为它是它的默认值
现在我处理我添加到列表中的每个点的编号,然后再更新它并将其添加回管道对象
我找到了一种只更新管道对象中的点列表而不更新整个对象的方法
@Query("UPDATE table_Lines SET points=:points WHERE id=:id ")
有趣的 updatePointsList(id:Int,points:MutableList)
如果有人知道如何将项目添加到作为实体 属性 的可变列表 class 无需更新列表或更新实体对象 请添加答案