viewModel (на скрине).
Функцию saveResultPoll() я дёргаю из фрагмента и далее выполняется код который берёт эти сохраненные данные из БД. Но получается, что берутся старые данные, то есть. корутина сохранения не успевает завершится.
Как можно дождаться завершения корутины из saveResultPoll() и продолжить код?
Так что именно не успевает выполниться? Данные сохраняются/получаются?
если нужно дождаться результата в корутине, то можно воспользоваться async{}.await
Данные сохраняются, да. Но сохраняются поздно, код который идёт дальше, успевает взять старые данные из БД, а не сохраненные
Используйте flow для получения данных из бд
Это ничего не даст в данном случае
Потому что создаётся новая корутина, которая работает асинхронно
livedata на табличку
Спасибо за ответ. Смотри, у меня функция showResult() из фрагмента запускает сохранение и потом в переменную trainingProgram должен прийти результат кое-каких вычислений. Функция getTrainingProperties() получает данные из БД, производит расчеты и возвращает результат. То есть, желательно мне просто дождаться выполнения saveResult() и потом продолжить код. Связать эти функции я не могу, они независимы друг от друга
Спасибо за ответ, но не совсем то, что нужно или просто у меня не получилось
В теории, можно, но кейс для лайвдаты наверное не подходит. Мне просто один раз получить надо результат и всё. Он не будет меняться в режиме реального времени. Подписываться тоже не обязательно. Запросил - получил, примерно так
могу предложить пару вариантов: 1. сделать saveResult() suspend и убрать оттуда запуск корутины, в фрагменте тогда будет viewLifecycleOwner.lifecycleScope.launch { withContext(Dispatchers.IO) { saveResult() } val trainingProgram = viewModel.getProperties() } 2. Передавать в getTrainingProperties resultPollDto: onClickListener (или что у тебя там): { viewModel.saveResult(myDto) val trainingProgram = viewModel.getProperties(myDto) }
Спасибо, воспользовался первым вариантом. Но view стала не такой уж и тупой, нарушаю Clean Architecture))
да, это правда, я бы все таки подумал как превратить trainingProperties в observable
Обсуждают сегодня