История с Kotlin. Игнорировать некоторые поля конструктора - PullRequest
0 голосов
/ 04 сентября 2018

Насколько я понял, аннотацию @StorIOSQLiteCreator можно использовать только для основного конструктора Kotlin. В моем случае у меня есть Parcelable класс данных с некоторыми, но не всеми полями, которые должны храниться в БД. Интересно, есть ли опция для создания вторичного конструктора kotlin для storio, который бы использовал полный список сохраненных полей или использовал первичный конструктор, но не аннотировал некоторые поля с помощью @StorIOSQLiteColumn

Я думаю, что решение должно выглядеть так:

@Parcelize
@StorIOSQLiteType(table = "tweets")
data class Tweet @StorIOSQLiteCreator constructor(
        @StorIOSQLiteColumn(name = "_id", key = true) var id: Long,
        @StorIOSQLiteColumn(name = "author") val author: String,
        var content: List<ParcelableButNotStoredObject>? = null
) : Parcelable

И вот как я могу достичь своей цели сейчас:

@StorIOSQLiteType(table = "tweets")
data class Tweet @StorIOSQLiteCreator constructor(
        @StorIOSQLiteColumn(name = "_id", key = true) var id: Long,
        @StorIOSQLiteColumn(name = "author") val author: String
) : Parcelable {

    var content: List<ParcelableButNotStoredObject>? = null

    constructor(parcel: Parcel) : this(
            parcel.readLong(),
            parcel.readString()) {
        content = parcel.createTypedArray(ParcelableButNotStoredObject.CREATOR).toList()
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeLong(id)
        parcel.writeString(author)
        parcel.writeTypedArray(content?.toTypedArray(), 0);
    }

    override fun describeContents(): Int = 0

    companion object CREATOR: Parcelable.Creator<Tweet> {
        override fun createFromParcel(parcel: Parcel): Tweet = Tweet(parcel)
        override fun newArray(size: Int): Array<Tweet?> = arrayOfNulls(size)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...