如何使用Architecture Compoenents立即接收数据?

时间:2018-11-20 18:00:49

标签: android architecture android-livedata

我正在尝试实施Google推荐的体系结构,他们在一个教程中显示了此图:

Architecture Components design

所以我有一个MainActivity,当应用启动时,它应该可以从互联网上获取一些数据。我在存储库中执行那些网络操作。现在,我的问题是我不知道如何在活动和存储库之间正确通信。例如,MainActivity启动,并在存储库获取数据时立即显示圆形进度条。将数据插入数据库后,如何在MainActivity中停止动画?我想我可以在observe()上呼叫LiveData并等待onChanged()。有没有更好的方法?如果没有新数据怎么办?这样onChanged()就不会被称为...

也许当没有数据时,我可以将存储库中的意图发送给MainActivity,以便MainActivity知道它应该停止动画,如果它没有收到意图,它只是等待onChanged()

我想我对onChanged()方法不满意,因为我永远无法确定它所对应的操作。可能在来自网络的数据到达之前,插入了一些其他数据,这些数据触发了onChanged(),这将使加载动画在应有的前提下停止。

1 个答案:

答案 0 :(得分:0)

关于您在评论中的问题,我相信也可以回答您的主要问题。

您需要从您的UI(活动/片段)观察LiveData中的进度ViewModel。可以使用BooleanLiveData<Boolean>)。表示进度视图是否可见。

这又需要从存储库中获取相同的LiveData(在存储库中声明为MutableLiveData)。然后,您将更新发布到进度MutableLiveData中。

现在,每当MutableLiveData收到更改时,由于共享变量引用,您的ViewModel中就存在该更改,该更改将传递给UI中的观察者。

-

或者,您可以从存储库中提取数据的方法返回LiveData<Boolean>。这样您就可以在用户界面中观察到了。

除了布尔型,还可以使用包含更多信息的更复杂的结构。消息,错误代码等。