Не удается обновить объект в базе данных комнат - PullRequest
1 голос
/ 10 октября 2019

Я хочу обновить свой объект в комнате по идентификатору, но это не работает.

Вот мой класс DAO

 @Query("UPDATE greeting SET id =:id")
    abstract fun updateGreetingByID(id: String)

Вот мой DBHelper

  fun updateGreetingByID(id: String) {
        Thread { dataBase.greetingDao().updateGreetingByID(id) }.start()
    }

Моя модель


@Entity(tableName = "greeting")
class GreetingModel(
    id: String? = "",
    greetingCategory: String = "",
    isFavourite: Boolean = false,
    position: Int = 0
) : Parcelable {

    @PrimaryKey(autoGenerate = true)
    var _id: Int = 0

    @ColumnInfo(name = "id")
    var id: String? = null

    @ColumnInfo(name = "greetingCategory")
    var greetingCategory: String? = null

    @ColumnInfo(name = "isFavourite")
    var isFavourite: Boolean? = null

    @ColumnInfo(name = "imageId")
    var imageId: ByteArray? = null

    @ColumnInfo(name = "position")
    var position: Int = 0

    @ColumnInfo(name = "saved")
    var saved: Int = 0

    constructor(parcel: Parcel) : this(
    ) {
        _id = parcel.readInt()
        id = parcel.readString()
        greetingCategory = parcel.readString()
        isFavourite = parcel.readValue(Boolean::class.java.classLoader) as? Boolean
        imageId = parcel.createByteArray()
        position = parcel.readInt()
        saved = parcel.readInt()
    }


    init {
        this.id = id
        this.greetingCategory = greetingCategory
        if (position != null) {
            this.position = position
        }
        this.isFavourite = isFavourite
    }

    override fun writeToParcel(parcel: Parcel, flags: Int) {
        parcel.writeInt(_id)
        parcel.writeString(id)
        parcel.writeString(greetingCategory)
        parcel.writeValue(isFavourite)
        parcel.writeByteArray(imageId)
        parcel.writeInt(position)
        parcel.writeInt(saved)
    }

    override fun describeContents(): Int {
        return 0
    }

    companion object CREATOR : Parcelable.Creator<GreetingModel> {
        override fun createFromParcel(parcel: Parcel): GreetingModel {
            return GreetingModel(parcel)
        }

        override fun newArray(size: Int): Array<GreetingModel?> {
            return arrayOfNulls(size)
        }
    }

}

Где id это val id = UUID.randomUUID().toString()

Я хочу обновить объект, когда пользователь нажимает на избранную кнопку

 val greetingModel = GreetingModel()
                    greetingModel.isFavourite = true
                    greetingModel.greetingCategory = " "
                    greetingModel.position = postImage


                    greetingModel.id?.let { helper.updateGreetingByID(greetingModel.id!!) }

Мой метод update не работает. Надеюсь, вы поможете!

1 Ответ

1 голос
/ 12 октября 2019

Ваша проблема заключается в том, что вы пытаетесь выполнить обновление в соответствии с недавно созданным Приветствием, у которого в качестве идентификатора задано значение идентификатора, когда Приветствие создается по умолчанию (без конструктора параметров).

Исправление состоит в том, чтобы получить конкретный идентификатор приветствия, по которому щелкнули, и установить идентификатор для этого значения перед выполнением обновления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...