Реализация Jetpack Compose Room @Upsert ⇐ Android
-
Гость
Реализация Jetpack Compose Room @Upsert
Здесь новый разработчик, и я работаю над приложением, которое функционально завершено, за исключением одного — обновления персонажа. Пользователь может создать своего персонажа и удалить его, но пока не обновлять. Я изо всех сил пытался найти информацию об использовании Upsert для обновления информации, и я был бы в порядке, если бы мне пришлось использовать Update. На данный момент я просто не уверен, как реализовать это в своем приложении. До сих пор я использую состояния с onEvents для взаимодействия с моей базой данных, как вы можете видеть ниже. Буду признателен за любую помощь, даже указание на нужные ресурсы, где можно узнать то, что мне нужно.
Моя сущность:
@Entity класс данных Символ( valcharacterName: String, valcharacterClass: String, valcharacterLevel: Int, valcharacterKeyAbilityScore: Int, @PrimaryKey(autoGenerate = true) действительный идентификатор: Int = 0 ) Дао:
@Дао интерфейс ПерсонажДао{ @Упсерт приостановить веселье upsertCharacter (персонаж: Персонаж) @Удалить приостановить веселье deleteCharacter(персонаж: Персонаж) // Параметры сортировки, если они понадобятся позже @Query("ВЫБРАТЬ * ИЗ символа ORDER BY по имени символа COLLATE NOCASE ASC") весело getCharactersOrderedByName(): Flow } База данных
@Database( сущности = [Персонаж::класс], версия = 1 ) абстрактный класс CharacterDatabase:RoomDatabase() { абстрактное Валь Дао: ПерсонажДао } На данный момент мое мероприятие проходит примерно так...
запечатанный интерфейс CharacterEvent { объект SaveCharacter: CharacterEvent класс данных SetCharacterName(valcharacterName:String): CharacterEvent и т. д.... } В моем случае я не знаю, как это реализовать. Я бы предположил что-то вроде: объект UpdateCharacter: CharacterEvent
Наконец, моя модель представления для сохранения персонажа выглядит следующим образом:
fun onEvent(event: CharacterEvent){ когда (событие) { ПерсонажEvent.SaveCharacter -> { val имя_персонажа = состояние.значение.Имя_символа valcharacterClass = state.value.characterClass valcharacterLevel = состояние.значение.characterLevel valcharacterKeyAbilityMod = state.value.characterKeyAbilityScore if (characterName.isBlank() ||characterClass.isBlank()){ return // Уровень и мод способностей по умолчанию равны 0. } val символ = Символ( Имя персонажа = Имя персонажа, Класс персонажа = Класс персонажа, Уровень персонажа = Уровень персонажа, characterKeyAbilityScore =characterKeyAbilityMod ) viewModelScope.launch { дао.upsertCharacter(персонаж) } // Сбрасываем значения по умолчанию. _state.update { это.копия( Имя персонажа = "", класс персонажа = "", уровень персонажа = 0, characterKeyAbilityScore = 0 ) } } Я просто изо всех сил пытаюсь найти ресурсы по этому вопросу больше, чем когда-либо раньше по любому языку программирования.
Здесь новый разработчик, и я работаю над приложением, которое функционально завершено, за исключением одного — обновления персонажа. Пользователь может создать своего персонажа и удалить его, но пока не обновлять. Я изо всех сил пытался найти информацию об использовании Upsert для обновления информации, и я был бы в порядке, если бы мне пришлось использовать Update. На данный момент я просто не уверен, как реализовать это в своем приложении. До сих пор я использую состояния с onEvents для взаимодействия с моей базой данных, как вы можете видеть ниже. Буду признателен за любую помощь, даже указание на нужные ресурсы, где можно узнать то, что мне нужно.
Моя сущность:
@Entity класс данных Символ( valcharacterName: String, valcharacterClass: String, valcharacterLevel: Int, valcharacterKeyAbilityScore: Int, @PrimaryKey(autoGenerate = true) действительный идентификатор: Int = 0 ) Дао:
@Дао интерфейс ПерсонажДао{ @Упсерт приостановить веселье upsertCharacter (персонаж: Персонаж) @Удалить приостановить веселье deleteCharacter(персонаж: Персонаж) // Параметры сортировки, если они понадобятся позже @Query("ВЫБРАТЬ * ИЗ символа ORDER BY по имени символа COLLATE NOCASE ASC") весело getCharactersOrderedByName(): Flow } База данных
@Database( сущности = [Персонаж::класс], версия = 1 ) абстрактный класс CharacterDatabase:RoomDatabase() { абстрактное Валь Дао: ПерсонажДао } На данный момент мое мероприятие проходит примерно так...
запечатанный интерфейс CharacterEvent { объект SaveCharacter: CharacterEvent класс данных SetCharacterName(valcharacterName:String): CharacterEvent и т. д.... } В моем случае я не знаю, как это реализовать. Я бы предположил что-то вроде: объект UpdateCharacter: CharacterEvent
Наконец, моя модель представления для сохранения персонажа выглядит следующим образом:
fun onEvent(event: CharacterEvent){ когда (событие) { ПерсонажEvent.SaveCharacter -> { val имя_персонажа = состояние.значение.Имя_символа valcharacterClass = state.value.characterClass valcharacterLevel = состояние.значение.characterLevel valcharacterKeyAbilityMod = state.value.characterKeyAbilityScore if (characterName.isBlank() ||characterClass.isBlank()){ return // Уровень и мод способностей по умолчанию равны 0. } val символ = Символ( Имя персонажа = Имя персонажа, Класс персонажа = Класс персонажа, Уровень персонажа = Уровень персонажа, characterKeyAbilityScore =characterKeyAbilityMod ) viewModelScope.launch { дао.upsertCharacter(персонаж) } // Сбрасываем значения по умолчанию. _state.update { это.копия( Имя персонажа = "", класс персонажа = "", уровень персонажа = 0, characterKeyAbilityScore = 0 ) } } Я просто изо всех сил пытаюсь найти ресурсы по этому вопросу больше, чем когда-либо раньше по любому языку программирования.
Мобильная версия