Вы выполняете асинхронный ввод-вывод непосредственно во фрагменте. Затем вы пытаетесь обновить пользовательский интерфейс фрагмента, когда эта работа завершена.
Проблема в том, что иногда ваш фрагмент будет уничтожен до завершения этой работы (например, пользователь нажал кнопку НАЗАД). В этом случае context
будет null
, а context!!
будет ... плохим.
Тактическое исправление состоит в том, чтобы обновлять пользовательский интерфейс, только если у вас есть контекст:
activity?.let {
userAdapter = UsersAdapter(it, mUsers as ArrayList<Users>, false)
recyclerView.adapter = userAdapter
}
Лучшее исправление, с достаточным запасом, - полностью убрать этот ввод-вывод из фрагмента. Если пользователь запускает изменение конфигурации (вращает экран, переключает темный режим и т. Д. c.), Ваш новый фрагмент не будет получать результаты ввода-вывода из исходного фрагмента. Было бы лучше переместить этот ввод-вывод в ViewModel
, который использует ваш фрагмент, где вы сделаете эти результаты доступными через LiveData
или аналогичный механизм. Ваш фрагмент наблюдал бы LiveData
и применил бы результаты. Это не только исправляет ошибку sh, но также лучше обрабатывает изменения конфигурации.