如何忽略带有Room的实体的归档

时间:2019-01-08 10:15:51

标签: android kotlin android-room data-class

我有一个数据类,我从该数据类中为我的数据库创建了一个Entity

这是我的数据类:

@Entity
@Parcelize
data class Tapligh(

    @PrimaryKey(autoGenerate = true)
    var id: Long,

    @SerializedName("title") var title: String?,
    @SerializedName("type") var type: Int?,
    @SerializedName("os") var os: Int?,
    @SerializedName("logo") var logo: String?,
    @SerializedName("template") var template: String?,
    @SerializedName("action") var action: String?,
    @SerializedName("date") var date: String?,
    @Embedded
    @SerializedName("videos") var videos: Videos?,

) : Parcelable {

    fun getTaplighType(): Int {

        return when (this.type) {

            0 -> TaplighType.IMAGE.type
            1 -> TaplighType.VIDEO.type
            else -> TaplighType.NATIVE.type
        }
    }
}

@Parcelize
data class Videos(

    @SerializedName("land") var land: String?,
    @SerializedName("port") var port: String?
) : Parcelable

现在,通过将以下字段添加到我的Tapligh数据类中,我将得到一个错误:

 @Ignore
 @SerializedName("images") var images: List<String>?

我收到此错误:

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).
public final class Tapligh implements android.os.Parcelable {
             ^

3 个答案:

答案 0 :(得分:1)

@Ignore在Kotlin类requires中的默认参数值和@JvmOverloads注释:

data class Tapligh  @JvmOverloads constructor(
    ...

    @Ignore
    @SerializedName("images") var images: List<String>? = null
)

答案 1 :(得分:0)

有时,当类实现Parcelable时,新字段会产生错误,因此请尝试删除Parcelable和类主体,再次放置Parcelable并实现成员,或者只是实现Serializable接口而不是Parcelable。

答案 2 :(得分:0)

提供的Taplight有错误:

@PrimaryKey(autoGenerate = true) var id: Long,
@SerializedName("title") var title: String?,
@SerializedName("type") var type: Int?,
@SerializedName("os") var os: Int?,
@SerializedName("logo") var logo: String?,
@SerializedName("template") var template: String?,
@SerializedName("action") var action: String?,
@SerializedName("date") var date: String?,
@Embedded
@SerializedName("videos") var videos: Videos?) {

constructor() : this(0,null,null,null,null,null,null,null,null)

videos似乎是最后一个参数,并且构造函数被错误地调用。我不知道这是复制粘贴还是格式错误,但希望对您有所帮助。