我有一个服务器请求(我正在使用VK SDK(。所以我想把所有的东西都移到另一个地方,然后打电话给它并得到回应。 这是我现在拥有的:
object GetAlbumsService {
fun getAlbums():GetAlbumsResponse{
lateinit var responseObject: GetAlbumsResponse
val request = VKRequest("photos.getAlbums", VKParameters.from("need_system", "1"))
request.executeWithListener(object: VKRequest.VKRequestListener(){
override fun onComplete(response: VKResponse?) {
responseObject = Gson().fromJson(response?.json.toString(), GetAlbumsResponse::class.java)
}
})
return responseObject
}
}
但是响应对象仍然null
。我说得对onComplete
函数没有时间填充responseObject
?如果是这样,我该怎么办?
不能从启动后台工作的函数返回异步回调的结果。但是您可以允许调用函数传递回调。
fun getAlbums(onComplete: (GetAlbumsResponse) -> Unit) {
val request = VKRequest("photos.getAlbums", VKParameters.from("need_system", "1"))
request.executeWithListener(object: VKRequest.VKRequestListener(){
override fun onComplete(response: VKResponse?) {
responseObject = Gson().fromJson(response?.json.toString(), GetAlbumsResponse::class.java)
onComplete(responseObject)
}
})
}
然后从你称之为:
GetAlbumsService.getAlbums { response ->
// Do something with response
}
当结果准备就绪时,将调用 lambda 的代码。
您也可以考虑使用协程,但这太多了,无法在此处的答案中从头开始解释。