【发布时间】:2019-04-01 13:10:26
【问题描述】:
我在 android studio 工作,正在使用 kotlin 协程从 API 检索结果。
我需要等到协程完成,所以我可以从中分配一个全局变量。
我已经测试了网址,没问题。 我尝试了常规线程,它可以工作,但无法让主线程等待它完成。
我尝试使用 Fuel.get() 并且效果很好,但我想使用 URL()。
var response = "";
val req = "url.com"
runBlocking { launch {
response = URL(req).readText()
} }
谁能告诉我为什么这段代码不起作用?它抛出一个 NetworkOnMainThreadException,但它被包裹在一个协程中。
【问题讨论】:
-
readText()可能不是suspend函数。您还没有指出您希望协程使用哪个线程。runBlocking将冻结 UI,即使您在后台线程上执行网络 I/O。我建议使用比java.net.URL更新、更强大的HTTPS 客户端API。 -
您应该在
ViewModel中使用viewModelScope进行自动后台调度。