Не удается заполнить адаптер в CoroutineScope

#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. Вы нашли ответ?