База данных Jetpack Compose + Room аварийно завершает работу во время повторной компоновки после удаления базовых данныхAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 База данных Jetpack Compose + Room аварийно завершает работу во время повторной компоновки после удаления базовых данных

Сообщение Anonymous »

У меня есть объекты Liability и Expense Android Room. Каждое обязательство имеет необязательный расход. У меня есть класс данных POJO LiabilityWithExpense, который используется Android Room для выбора данных об ответственности (обязательно) и данных о расходах (необязательно) в объединенном запросе, чтобы я мог получить их все сразу.
У меня есть компонуемый ViewLiability. Я передаю ему идентификатор базы данных Android Room для строки базы данных Liability. Я собираю LiabilityWithExpense как состояние:

Код: Выделить всё

val liabilityWithExpense by liabilityViewModel.getFullLiabilityById(liabilityId).collectAsState(LiabilityWithExpense.placeholder())
LiabilityWithExpense.placeholder() просто объект LiabilityWithExpense с данными-заполнителями, поэтому объект пассиваWithExpense не является необязательным. (Я пробовал сделать эту ответственность с Expense необязательной, но тогда мой пользовательский интерфейс не перестраивается автоматически при изменении базовых данных.)
На экране ViewLiability , пользователь может делать что угодно и нажимать кнопку, которая в конечном итоге удалит объект, а затем немедленно вытолкнет стек навигации.

Код: Выделить всё

suspend fun finishPayoff() {
liabilityViewModel.delete(liabilityWithExpense.liability)

navController.popBackStack()
}
Но прежде чем экран будет извлечен из стека навигации, он будет перекомпонован, и моя переменная состояния пассиваWithExpense станет нулевой, поскольку базовая строка базы данных была удалена, и код пользовательского интерфейса аварийно завершает работу при попытке доступа к этой необязательной переменной, содержащей нулевое значение.
Как я могу удалить базовые данные и извлечь стек навигации без перекомпоновки экрана и сбоя?
Или я с самого начала подхожу к этому неправильно? Есть ли какой-то стандартный шаблон, который мне следует использовать?
К вашему сведению, я уже пытался прочитать другие вопросы и нашел поток базы данных Jetpack Compose Room, удаление элемента из базы данных вызывает перекомпоновку, которая запрашивает почти точно мой тот же вопрос, но предоставленный ответ касается ситуации со списком пользователей и того, как этого удаленного пользователя больше не будет. Но это не настоящий вопрос, потому что этого вопроса (и моего вопроса) нет в разделе «Список» пользовательского интерфейса. Мы находимся на экране ViewingASingleObject, и этот объект удаляется.

Подробнее здесь: https://stackoverflow.com/questions/790 ... g-the-unde
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»