#android #kotlin #coroutine
#Android #kotlin #сопрограмма
Вопрос:
Я изучаю сопрограммы и попытался провести небольшой эксперимент. Я хотел получить данные из серверной части и заполнить их с помощью recyclerview.
Итак, чтобы сделать это:
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout....)
val linearLayoutManager = LinearLayoutManager(this)
recyclerview.layoutManager = linearLayoutManager
GlobalScope.launch {
val dataList = Repository().getData() //
runOnUiThread {
adapter = Adapter(dataList, ..., listener)
bodyPart.adapter = adapter
adapter.notifyDataSetChanged()
}
}
}
suspend fun getData(): List<data> = coroutineScope {
return@coroutineScope if (...) {
getFromApi()
} else {
getLocal()
}
}
Но это вообще не работает. Функция адаптера, подобная onCreateViewHolder
, не вызывается. Всякий раз, когда я перемещаю часть настройки данных адаптера за пределы GlobalScope.launch
, это работает нормально. Я не понимаю, почему это происходит и как мне решить эту проблему. Заранее спасибо! 🙂
Комментарии:
1. Просто для обучения, а не для ответа на вопрос. Не используйте
GlobalScope
. Укажите свою собственную область.2. попробуйте изменить runOnUiThread на withContext(Dispatchers.Main){ }
3. @RofieSagara Нет, это не работает :/
4. Вы устанавливаете адаптер recyclerview где-то еще? В вашем коде вы устанавливаете адаптер для BodyPart.
5. Вы нашли ответ?