使用 Picasso 和协程

问题描述 投票:0回答:1

我正在尝试将图像从服务器加载到

ImageView

button.setOnClickListener {
    CoroutineScope(Dispatchers.IO).launch {
        val url = mainApi.loadMyImage()              
        Picasso.with(requireContext()).load(url)
            .into(imgView)
        }
    }

毕加索出现错误:

java.lang.IllegalStateException:方法调用应该从主线程发生。

你能解释一下我的代码中主线程和

CoroutineScope
之间通信的正确方法吗?

kotlin retrofit kotlin-coroutines picasso
1个回答
0
投票

当你想改变UI时,你必须在主线程上进行。所以,你在IO线程中获取数据,然后在主线程上更新UI

这是代码:

button.setOnClickListener {
CoroutineScope(Dispatchers.IO).launch {
    val url = mainApi.loadMyImage()
    withContext(Dispatchers.Main){              
        Picasso.with(requireContext()).load(url)
            .into(imgView)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.