我正在使用Room和Kotlin数据类。例如
@Entity(tableName = "Person")
@Parcelize
class Test(@ColumnInfo(name = "name") var name:String) : Parcelable{
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "ID")
var id: Long? = null
}
我可以使用构造函数创建实例并插入数据。我也收到警告"property would not be serialized into a 'parcel'"
。当我尝试通过分发包发送对象时,id丢失了,这是警告所希望的。如何在包裹中添加该成员ID
?我没有将ID保留在构造函数中,因为我希望它们可以自动生成。
谢谢。
答案 0 :(得分:1)
您可以通过documentation找到此信息:
@Parcelize
要求在主构造函数中声明所有序列化的属性。 Android扩展程序会针对每个属性发出警告,并在类主体中声明一个支持字段。另外,如果某些主要的构造函数参数不是属性,则无法应用@Parcelize
。如果您的类需要更高级的序列化逻辑,则可以在同伴类中编写它:
@Parcelize
data class User(val firstName: String, val lastName: String, val age: Int) : Parcelable {
private companion object : Parceler<User> {
override fun User.write(parcel: Parcel, flags: Int) {
// Custom write implementation
}
override fun create(parcel: Parcel): User {
// Custom read implementation
}
}
}
答案 1 :(得分:-1)
感谢@tynn提供参考。如果有人找不到解决方法,我还会发表另一篇文章。
@Entity(tableName = "Person")
@Parcelize
data class Test(@ColumnInfo(name = "name") var name:String,
@PrimaryKey(autoGenerate = true)
@ColumnInfo(name = "ID")
var id: Long? = null) : Parcelable
您仍然可以创建没有ID的对象,例如Test("test name")
,并且当该对象保存在ROOM中时,它将插入一个递增的值。