android - 如何使用 Retrofit 进行同步调用
问题描述
我正在尝试使用 Retrofit call.enqueue ( DrawCircles() )获取数据,当我调试值时,但我认为它不会等待,我的函数会继续执行其余的代码行。所以当我运行它时,结果列表(myListCoord)总是为空,如何进行同步调用。
这是我的代码:
doAsync {
var a = DrawCircles()
myListCoord = a.runCircles()
}
fun runCircles(): List<Coordinates>? {
val request = ServiceBuilder.buildService(TmdbEndpoints::class.java)
val call = request.getCorrdinates()
call.enqueue(object : Callback<MyList> {
override fun onResponse(call: Call<MyList>, response: Response<MyList>) {
if (response.isSuccessful){
Toast.makeText(this@DrawCircles, "Succès", Toast.LENGTH_LONG).show()
myListCoord = response.body()!!.locations
}
}
override fun onFailure(call: Call<MyList>, t: Throwable) {
Toast.makeText(this@DrawCircles, "${t.message}", Toast.LENGTH_SHORT).show()
}
})
return myListCoord
}
解决方案
您是否尝试过使用call.execute()
而不是call.enqueue()
?
从文档:
void enqueue(Callback<T> callback)
异步发送请求并通知其响应的回调,或者在与服务器交谈、创建请求或处理响应时发生错误。
Response<T> execute() throws IOException
同步发送请求并返回其响应。
(强调我的)
推荐阅读
- database - 我需要从 DynamoDB 中的用户表中获取用户 ID?
- c++ - 指针在 push_back 后被修改
- c - 将头文件中的 typedef 枚举包含在另一个头文件中
- python - Keras_ocr 导入失败
- python - pip install azureml-sdk 以及底层库的最新补丁
- java - 如何将 -javagent /path/to/newrelic.jar 参数传递给运行 HiveMetaStore 服务器的 JVM
- azure-data-explorer - 如何在 Kusto 中将控制命令与参数化查询相结合?
- java - 测试启用了 spring security oauth2login 的应用程序抛出 IllegalArgumentException: clientRegistrationRepository cannot be null
- android - 在 Android Studio (Kotlin) 中设置增量和减量限制
- android - 作业调度程序 Android