【问题标题】:How @Ignore works in data class with Room@Ignore 如何在带有 Room 的数据类中工作
【发布时间】:2019-07-08 01:37:56
【问题描述】:

我试图为 Room 创建一个数据类,并且该类还有一个仅用于视图的字段。我不想将数据保存到 Room。

@Entity(tableName = "MyTable")
@Parcelize
data class MyTable(
    @SerializedName("id") @PrimaryKey val id: String,
    @SerializedName("field1") val field1: String?,
    var selected: Boolean? = false //todo use @Ignore
) : Parcelable

上面的代码有效。但是,每当我尝试将@Ignore 注释与带有selected 变量的变量一起使用时。它给了我以下错误

error: Entities and Pojos must have a usable public constructor. You can have an empty constructor or a constructor whose parameters match the fields (by name and type).

如果我从构造函数中删除变量,例如

    @Entity(tableName = "MyTable")
    @Parcelize
    data class MyTable(
        @SerializedName("id") @PrimaryKey val id: String,
        @SerializedName("field1") val field1: String?

    ) : Parcelable{
    var selected: Boolean? = false //todo use @Ignore
    }

selected 字段不会被写入包裹中。如何在不创建列的情况下将变量保留在类中并仍将其保留在包裹中?

谢谢

【问题讨论】:

  • 我认为你可以有一个空的构造函数。你有什么错误吗?
  • 我尝试使用空构造函数。仍然无法正常工作。我还将@ignore 与构造函数一起使用。但没用
  • @Parcelize 要求在主构造函数中声明所有序列化属性。所以我认为你必须实施你的自定义包裹。我希望这个答案能让你更清楚stackoverflow.com/questions/53312247/…
  • 您是否尝试过不使用数据类而只使用普通类?

标签: android kotlin android-room


【解决方案1】:

@Ignore在这种情况下目前requires@JvmOverloads注解:

data class MyTable @JvmOverloads constructor(
    ...
    @Ignore var selected: Boolean? = false
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多