【问题标题】:How to handle status of a network request with LiveData, ViewModel and update UI accordingly如何使用 LiveData、ViewModel 处理网络请求的状态并相应地更新 UI
【发布时间】:2018-01-28 02:53:53
【问题描述】:

使用 Retrofit 我可以获取用户列表,但如果出现错误,我应该如何设法向 UI 发送通知。

我在 MVVM 模式中使用 Android 架构组件“ViewModel”、“LiveData”和 Retrofit 作为网络库。

【问题讨论】:

  • 嘿Sharad,你介意给我们一些代码吗?您可以将即 POST 用户发送到您的远程后端,对吗?
  • 我会建议您是否要使用 ArchitectureComponents 和 Retrofit,如果您想处理来自网络请求的错误。创建被称为存储库。存储库只是您的 ViewModel 和后端之间的抽象。它将促进您的所有 CRUD 操作并将它们传递给您的视图模型。检查此链接developer.android.com/topic/libraries/architecture/guide.html
  • @martinomburajr 我正在从后端获取使用改造的用户列表。如果请求成功,UI 将通过存储库和视图模型获取用户列表。但是如果出现错误(如果有的话),我不知道如何将错误通知发送到 UI。我使用的架构与此链接中给出的架构相同。 developer.android.com/topic/libraries/architecture/guide.htm‌​l

标签: android mvvm


【解决方案1】:

当网络请求成功完成时,您正在设置 livedata 的值。 同样,在错误时将 livedata 的值设置为 null,并在更新 UI 之前在 Activity 中检查 null。

进一步:如果您想向用户显示不同类型的错误。创建一个包含基本模型的基本模型类 error_code、error_status 等字段。

【讨论】:

  • 感谢回复,但是livedata的值也可以是List,所以在这种情况下创建基础模型是行不通的。
  • 好吧,创建一个 LiveData 来传播错误怎么样。为错误创建一个模型类,就像我上面所说的,使用 error_status 之类的字段,将其包装在 LiveData 中。根据改造错误设置实时数据的值。 (如果没有错误 null 会很好,我认为)。然后让您的错误视图订阅错误实时数据。
【解决方案2】:

我终于找到了我的问题的答案。官方文档本身对此提供了答案。 Use Resource along with NetworkBoundResource to achieve this.

直接链接: https://developer.android.com/topic/libraries/architecture/guide.html#addendum

【讨论】:

    猜你喜欢
    • 2017-10-27
    • 2017-10-27
    • 1970-01-01
    • 2018-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-30
    • 1970-01-01
    相关资源
    最近更新 更多