Насколько я понял, аннотацию @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)
}
}