如何使用 Architecture Components 即时接收数据?

How to receive data instantly with Architecture Compoenents?

我正在尝试实施 Google 推荐的架构,他们在教程中展示了这张图:

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

也许我可以在没有数据时将意图从 Repository 发送到 MainActivity,以便 MainActivity 知道它应该停止动画,如果它没有收到意图它只是等待 onChanged()

我想我只是对 onChanged() 方法感到不舒服,因为我永远无法确定它对应的操作。也许在来自网络的数据到达之前,插入了一些其他数据,这些数据触发了 onChanged(),然后会在它应该停止之前停止加载动画。

关于你在评论中的问题,我相信这也能回答你的主要问题。

您需要观察 UI(Activity / 片段)到 ViewModel 的进步 LiveData。这可能与 Boolean (LiveData<Boolean>) 一起工作。表示进度视图是否可见。

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

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

-

或者,您可以从存储库中提取数据的方法 return LiveData<Boolean>。然后可以在您的 UI.

中观察到

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