Постоянное обновление библиотеки Android Room не работает - PullRequest
0 голосов
/ 21 февраля 2019

Я использую room в своем новом приложении для Android и пытаюсь обновить свойство объекта модели во время выполнения, но, похоже, оно не сохраняется.

Entity

@Entity(tableName = "sessions")
data class Session(@ColumnInfo(name="id") @PrimaryKey(autoGenerate = true) var id: Int = 0,
                   @ColumnInfo(name="date") var date: Date,
                   @ColumnInfo(name="repetitions_completed") var repetitionsCompleted: Int,
                    @ColumnInfo(name="squeeze_time_per_rep") var squeezeTimePerRep: Int,
                    @ColumnInfo(name="finishing_repetitions_completed") var finishingRepetitionsCompleted: Int,
                    @ColumnInfo(name="finishing_squeeze_time_per_rep") var finishingSqueezeTimePerRep: Int)

В моем приложении я использую его вот так

session = Session(0,date,0,slowSeconds,0,quickSeconds)
sessionDao.insertAll(sessionDB)

...
session.repetitionsCompleted = totalSlowReps
session.finishingRepetitionsCompleted = totalQuickReps
sessionDao.updateSessions(session)

Проблема в том, что значения свойств сеанса, такие как repetitionsCompleted и finishingRepetitionsCompleted, похоже, не сохраняются, ивсегда остается 0, когда я перезапускаю приложение.updateSessions также возвращает 0

Вот код для Dao

@Dao
interface SessionDao {

    // https://developer.android.com/training/data-storage/room/accessing-data#query-params

    @Query("SELECT * FROM sessions")
    fun getAll(): List<Session>

    @Query("SELECT * FROM sessions WHERE date BETWEEN :from AND :to")
    fun getSessionsBetween(from: Date, to: Date): List<Session>

    @Query("SELECT * FROM sessions ORDER BY date LIMIT 1")
    fun getOldestSession(): List<Session>

    @Update
    fun updateSessions(vararg sessions: Session) : Int

    @Insert
    fun insertAll(vararg sessions: Session)

}

Что страннее, что обновление работает в моем модульном тесте, но не в самом коде приложения.

Не знаю, влияет ли это на вещи, но я запускаю это в службе.

1 Ответ

0 голосов
/ 21 февраля 2019

Я понял, проблема в том, что когда я создал объект session, объект возвращается с id, установленным в 0, а не с его первичным ключом autoGenerate, так что я сделал, изменив insert навернуть вставленный идентификатор

@Insert
fun insertAll(vararg sessions: Session) : List<Long>

Когда я создаю сеанс, я вручную переназначаю его идентификатор

sessionDB = Session(0,date,0,slowSeconds,0,quickSeconds)
val insertID = sessionDao.insertAll(sessionDB).first().toInt()
sessionDB.id = insertID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...