Я использую 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)
}
Что страннее, что обновление работает в моем модульном тесте, но не в самом коде приложения.
Не знаю, влияет ли это на вещи, но я запускаю это в службе.