我有一个到服务器的请求(我正在使用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
}
}
但是responseObject仍然为null
。我对onComplete
函数没有时间填写responseObject
感到正确吗?如果可以,该怎么办?
答案 0 :(得分:1)
您不能从启动后台工作的函数中返回异步回调的结果。但是您可以允许调用函数传递回调。
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。
您也可以研究使用协程,但这在这里的答案中无法从头开始解释。