如何使用 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.
中观察到
除了布尔值,您还可以使用包含更多信息的更复杂的结构。消息、错误代码等
我正在尝试实施 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.
除了布尔值,您还可以使用包含更多信息的更复杂的结构。消息、错误代码等