android - 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
}
解决方案
您正在进行异步调用,因此在异步调用解决之前不会设置 data.value 。但是,由于您正在生成一个 MutableLiveData,您应该能够观察到,当您的异步调用设置该值时,它将为您提供更新。
推荐阅读
- c - 我一直在 Visual Studio 代码上收到此错误(WildcardPatternException)
- apache - .htaccess 重写隐藏参数并保持文件相同
- swift - 如何在 Swift 中处理解析 JSON 错误
- java - 无法从 WebView 下载 pdf 文件。始终下载 .bin 文件。我签入了具有 android 10 的一加手机
- firebase - 在 null 上调用了方法“[]”。接收方:空。尝试调用:[]("myuserId")
- javascript - 将不相交的数组合并为一个数组
- python - 如何生成没有重复和对称的 itertools 产品?
- java - 对没有任何参考的资源使用“尝试资源”
- algorithm - golang中的线程Decasteljau算法
- python - MRJob - 迭代值