首页 > 解决方案 > Kotlin 中的 Retrofit2 排队 onResponse()

问题描述

在异步 onResponse() 中设置 data.value 之前,函数返回 null。如何使其首先获取数据然后返回该数据?

fun getNews(code: String): LiveData<List<News>>{

    val call = service.getNewsByCountry(code, Constant.API_KEY)

    var data = MutableLiveData<List<News>>()

    call.enqueue(object : Callback<NewsResponse> {
        override fun onFailure(call: Call<NewsResponse>?, t: Throwable?) {
            Log.v("retrofit", "call failed")
        }

        override fun onResponse(call: Call<NewsResponse>?, response: Response<NewsResponse>?) {
            data.value = response!!.body()!!.articles
        }

    })

    return data
}

标签: androidkotlinretrofit2

解决方案


您正在进行异步调用,因此在异步调用解决之前不会设置 data.value 。但是,由于您正在生成一个 MutableLiveData,您应该能够观察到,当您的异步调用设置该值时,它将为您提供更新。


推荐阅读