【发布时间】:2019-07-06 09:23:51
【问题描述】:
我有一个 suspend 函数调用 POST 请求到服务器。我想在活动中配置一些文本来显示我从服务器收到的信息。
suspend fun retrieveInfo():String
我尝试在 onCreate、onResume 内部调用,但运行时崩溃。
runBlocking {
retrieveInfo()
}
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.google.augmentedimage/com.google.AugmentedImageActivity}: android.os.NetworkOnMainThreadException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3086)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3229)
at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
我应该将这些挂起调用放在哪里(在活动生命周期的哪一部分)?我应该使用runBlocking 以外的东西吗?
【问题讨论】:
-
从你的主线程启动一个协程。
CoroutineScope(Dispatchers.Main).launch { withContext(Dispatchers.IO) { myFun() } -
一般来说,此类事情的首选方法是使用
ViewModel,然后使用它内置在viewModelScope(medium.com/androiddevelopers/… 中的更多详细信息)
标签: android kotlin kotlin-coroutines