我试图在0.30.0中使用最新的协同程序,并且无法弄清楚如何使用新的作用域.在原始的协同程序中,我可以使用UI或CommonPool设置上下文,一切正常.
现在我正在尝试在从房间数据库中读取时在我的ViewModel中使用GlobalScope,然后我想将返回的值赋给我的LiveData对象.
我尝试设置LiveData值时收到以下错误
java.lang.IllegalStateException:无法在后台线程上调用setValue
fun getContact() {
GlobalScope.launch {
val contact = contacts.getContact() // suspended function
withContext(Dispatchers.Default) { phoneContact.value = contact }
}
}
Run Code Online (Sandbox Code Playgroud)
我只看到调度员的默认,无限和IO,而且没有一个工作,我无法弄清楚我做错了什么?我对主线程的选择在哪里?