【问题标题】:why MutableLiveData setValue don't work when getting the response from retrofit2.Callback为什么 MutableLiveData setValue 在从 retrofit2.Callback 获得响应时不起作用
【发布时间】: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


【解决方案1】:

当你得到结果时尝试初始化 MutableLiveData

var data: MutableLIveData<CurrentResponse> = null //or lateinit

...

data = MutableLiveData<CurrentResponse>(response.body()?.currently)

或者您可以尝试使用 postValue 而不是 setValue。这样就通知了观察者

data.postValue(response.body()?.currently)

【讨论】:

    【解决方案2】:

    使用

    Timber.d("response: ${response.body()?.currently}")
                data.postvalue = response.body()?.currently
    

    【讨论】:

    • 虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-17
    • 1970-01-01
    • 2017-10-13
    相关资源
    最近更新 更多