【发布时间】:2019-03-01 14:07:29
【问题描述】:
所以我在存储库中有这个功能:
fun getFeaturedLive() : MutableLiveData<Resource<Prod>> {
val res = MutableLiveData<Resource<Prod>>()
res.value = Resource.loading(null) //status = loading, data = null, message - null
client.request({
it.getOnlineProduct(param1, param2, param3)
},{//executes on success return from server
res.value!!.status = Status.SUCCESS
res.value!!.data = it
},{//executes on error return from server
res.value!!.status = Status.ERROR
res.value!!.message = it.message
true //error handled
})
return res
}
res 被返回,然后,当来自服务器的响应到来时,on success 函数被执行,修改数据和状态。
现在在我的 onViewCreated 方法中,我有这样的东西:
viewmodel.prodLive.observe(this, Observer {
if (it.status == Status.ERROR) errAlert(it.message)
if( it.status == Status.SUCCESS) initList(prodList, it.data)
if (it.status == Status.LOADING) log("loading ...")
})
服务器返回该产品,调用 onsuccess 函数并修改 livedata,但观察者看不到它。我应该如何修改代码,以便观察者对数据更改做出反应?我是 LiveData 的新手,所以如果您有任何其他建议,我很高兴听到。
这是在我的视图模型中
var prodLive = MutableLiveData<Resource<Prod>>()
private set
fun init(){
prodLive = Rep.getFeaturedLive()
}
【问题讨论】:
-
viewmodel.prodLive是getFeaturedLive()的对象吗? -
是的,这就是'var prodLive = MutableLiveData
>() 私有集' -
你正在观察和改变不同对象的价值
-
我将他分配给存储库函数返回值。他们现在不应该是一样的吗?
标签: android asynchronous kotlin reactive-programming android-livedata