Использую Retrofit, чтобы распарсить сложный Json. Приходится использовать много вложенных циклов в дисериализаторе, поэтому ответ приходит медленнее чем главный поток, возвращает результат из функции.
override fun getVideoInfo(id: String): Video? {
var video:Video? = Video(null)
retrofitClient.getVideoInfo(id).enqueue(object : Callback<VideoItemResponse> {
override fun onFailure(call: Call<VideoItemResponse>, t: Throwable) {
video = null
Log.e(VIDEO_ITEM_TAG, "Failure: $t.message" )
}
override fun onResponse(
call: Call<VideoItemResponse>,
response: Response<VideoItemResponse>
) {
video = response.body()?.item
Log.e(VIDEO_ITEM_TAG, "Response: ${video}")
}
})
Log.e(VIDEO_ITEM_TAG, "Before return: ${video}")
return video
}
Вот лог:
2020-08-18 16:00:25.783 14824-14824/ru.app.yf E/Video item request: Before return: Video(videoId=null, title=null, duration=null, description=null, thumbnails={}, views=null)
2020-08-18 16:00:25.912 14824-14824/ru.app.yf E/Video item request: Response: Video(videoId=Chjs4xqYe0E, title=Влог из США. Я сделал ЭТО!, duration=PT15M37S, description=Регистрируйся в LetyShops и возвращай горящий кэшбэк
Как видно ответ приходит на 129 милисикунды позже. Пытался перед
return усыпить поток.
Thread.sleep(1000)
Log.e(VIDEO_ITEM_TAG, "Before return: ${video}")
return video
Это не помогло. Как это можно решить?