代码之家  ›  专栏  ›  技术社区  ›  sadat

如何在使用@Parcelize时将数据类中构造函数以外的成员变量打包

  •  0
  • sadat  · 技术社区  · 7 年前

    @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,因为我希望自动生成它们。

    2 回复  |  直到 5 年前
        1
  •  7
  •   tynn    5 年前

    您可以使用 documentation :

    @Parcelize 要求在主构造函数中声明所有序列化属性。Android扩展将对每个属性发出警告,并在类主体中声明一个支持字段。也, 如果某些主构造函数参数不是属性,则无法应用。

    @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
            }
        }
    }
    
    推荐文章