【发布时间】:2021-09-17 13:36:03
【问题描述】:
我的片段中有以下代码,特别是在我的onViewCreated:
searchResponse = searchCall.execute()
if (!searchResponse.isSuccessful || searchResponse.body()!!.results!!.isEmpty()) {
// code
} else {
getResponse = getCall.execute()
// more code
if (!getResponse.isSuccessful || getResponse.body()!!.extendedIngredients!!.isEmpty()) {
// more code
} else {
convertResponse = convertCall.execute()
// more code
}
}
显然不是整个代码,但它是该代码块基本结构的一个非常简化的版本。基本上,我正在通过改造运行三个 API 调用,我需要它们一次运行一个,因为getResponse API 请求取决于我从searchResponse 和convertResponse 获得的数据,API 请求取决于我获得的数据来自getResponse。这就是我没有使用 Retrofit 的 enqueue 的原因,因为它异步运行 API 调用,而我试图同步运行它们。如何让execute 方法起作用?现在我收到android.os.NetworkOnMainThreadException 错误。
【问题讨论】:
-
你为什么不仍然异步运行
searchResponse,然后在主线程中检查结果,如果你需要调用getResponse,你只需运行另一个异步任务,然后再次检查结果主线程等
标签: android kotlin retrofit networkonmainthread