В классе репозитория (см .: https://developer.android.com/jetpack/docs/guide), Я пытаюсь:
1) Считать значение из БД комнаты
2) Увеличить значение
3) Запишите значение обратно через appDao в Room.
Я почти уверен, что смогу решить эту проблему на уровне Дао, то есть в транзакции или чем-то еще, но я не уверенесли это правильный подход. Это похоже на довольно простой вариант использования, и решения, которые я придумаю, кажутся намного более сложными, чем необходимо. Я задаюсь вопросом, удерживает ли меня моя слабая ручка на сопрограммах Kotlin здесь.
/* Repository Class*/
fun getCurrentAlarmTime():LiveData<Calendar> {
return Transformations.map(appDao.getProfileData(currentAlarmTime)){ nullableProfileData ->
if (nullableProfileData == null) {
defaultAlarmTime
} else {
nullableProfileData.value.toLongOrNull()?.let { millis ->
getCalendar(millis)
}
}
}
}
fun setCurrentAlarmTime(calendar:Calendar) {
GlobalScope.launch {
appDao.setProfileData(
ProfileData(
currentAlarmTime,
calendar.timeInMillis.toString()
)
)
}
}
fun incrementAlarmTimeBy1Hour() {
// this is what I'm having a problem with, using the fns above.
// I've got a pretty good handle on LiveData,
// Transformations, and MediatorLiveData,
// but I am still stuck.
}
Expected result would be that the time in the database is updated by 1 hour.