简体   繁体   中英

How to ignore a filed of Entity with Room

I have a data class that I created an Entity from that for my database.

this is my data class:

@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

Now by adding below field into my Tapligh data class, I will get an error:

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

I am getting this error:

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 {
             ^

@Ignore in Kotlin classes requires default parameter value and @JvmOverloads annotation:

data class Tapligh  @JvmOverloads constructor(
    ...

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

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

The provided Taplight has errors:

@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 seems like the last argument and the constructor was badly called. I don't know if that was a copy-paste or formatting error, but hope it could help.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM