我有一个方法,在这个方法中,我希望通过一个API调用来检查我的令牌的有效性,并且我希望等待结果。我想使用CountDownLatch,但似乎countDownLatch.await()锁定了线程,什么都没有发生,调试器没有到达onResponse部分。我和邮递员检查了我的API,这个电话真的打到了。
我还发现了一个类似于我的问题的问题,但它没有帮助:CountDownLatch不释放线程
var isTokenExpired = false
var countDownLatch = CountDownLatch(1)
val userService = RetrofitClient.getInstance().create(DiaBUserService::class.java)
userService.validate(token).enqueue(object : Callback<JsonObject> {
override fun onResponse(call: Call<JsonObject>, response: Response<JsonObject>) {
isTokenExpired = !response.isSuccessful
countDownLatch.countDown()
}
override fun onFailure(call: Call<JsonObject>, t: Throwable) {
t.printStackTrace()
countDownLatch.countDown()
}
})
try {
countDownLatch.await()
} catch (e: InterruptedException){
e.printStackTrace()
}
return isTokenExpired我是否使用了任何错误,或者是否有其他方法获得所需的函数?
发布于 2019-05-05 22:37:15
Retrofit 回调文档说:
Callbacks are executed on the application's main (UI) thread.主线程在方法CountDownLatch#await上被阻塞,因此不会执行CountDownLatch#countDown。您可以为要运行的回调指定后台执行器(例如,SingleThreadExecutor)。
val retrofit = Retrofit.Builder()
// options
.callbackExecutor(Executors.newSingleThreadExecutor())
// options
.build()https://stackoverflow.com/questions/55993728
复制相似问题