【发布时间】:2020-01-30 01:01:06
【问题描述】:
在 kotlin 中回调后如何返回值,我尝试使用 Thread.sleep 但它不起作用
fun searchColorFromAPI(): Colors {
val service: RetrofitService = ServiceGenerator.createService(RetrofitService::class.java)
val result: MutableList<String> = arrayListOf()
val call: Call<Colors?>? = service.unityConverter(result)
call?.enqueue(object : Callback<Colors?> {
override fun onResponse(call: Call<Colors?>?, response: Response<Colors?>) {
//switchProgressVisibility()
if (response.isSuccessful) {
val serviceResponse: Colors? = response.body()
if (serviceResponse != null) {
mColors = serviceResponse
}
else {
//buildToast(getString(R.string.null_response))
}
}
else {
//buildToast(getString(R.string.response_unsuccessful))
val errorBody: ResponseBody = response.errorBody()
Log.e(TAG, errorBody.toString())
}
}
override fun onFailure(call: Call<Colors?>?, t: Throwable?) {
/* buildToast(getString(R.string.error_calling_service))
Log.e(TAG, t?.message)*/
}
})
return mColors
}
总是,mColors 在 onFailure 或 onResponse 之前返回,因为它们是异步的。在这段代码在 MainActivity 之前,但我被建议起飞,但现在当我尝试获取 mColors 时,我在执行 onResponse 之前和之后得到空值,请我还在学习 Kotlin 和 Android。
【问题讨论】:
-
Kotlin 的 lambda 函数对回调很有用。检查此答案以获取函数的回调。 [stackoverflow.com/a/59942825/12688463]