【发布时间】:2020-12-30 01:47:12
【问题描述】:
我正在开发一个安卓应用程序。我使用 retrofit2 调用 REST API 并试图获得响应。我可以看到我在 onResponse() 上得到了响应,但是当我在 onResponse() data.value = response.body()?.currently 上分配它时,作为 MutableLiveData 的 val 数据没有得到值。
override fun getSavedCurrentForecast(): LiveData<CurrentResponse> {
val data = MutableLiveData<CurrentResponse>()
val forecast = retrofitClient.getForecast(locationDataStore?.location)
forecast.enqueue(object : retrofit2.Callback<ForecastResponse> {
override fun onResponse(
call: Call<ForecastResponse>,
response: Response<ForecastResponse>
) {
if (response.isSuccessful) {
Timber.d("response: ${response.body()?.currently}")
data.value = response.body()?.currently
}
}
override fun onFailure(call: Call<ForecastResponse>, t: Throwable) {
Timber.d("onFailure: $t")
}
})
return data
}
我知道我收到了响应,但该方法仍然返回 null。我会很感激帮助,请随时要求澄清。
【问题讨论】:
-
从不同的线程你应该使用 postValue,以及你如何检查是否没有价值?.. 你应该使用观察,因为很明显在这个调用之后就不会有任何价值
-
感谢您的评论,不是来自其他线程。 onResponse 在主线程上运行,所以 setvalue 应该没问题。您说当我调用此方法时,您基本上如何检查是否没有值,返回值为空。这里应该怎么用observe?
标签: android mvvm android-livedata mutablelivedata