【问题标题】:Can I use ViewModel to send data to the server?我可以使用 ViewModel 向服务器发送数据吗?
【发布时间】:2019-02-19 06:54:30
【问题描述】:

目前,我正在使用ViewModel 在我的应用程序中加载节目列表。然后,我将其显示在主屏幕中。由于 ViewModel 具有此功能,因此它可以承受配置更改并且不会引起内存泄漏。

现在我需要做一些不同的事情。我需要登录一个使用改造 2 和 rxjava 2 对端点进行网络调用的用户,他将输入电子邮件和密码,然后将被重定向到 MainActivity。其次,我还需要更新用户信息,他输入他的新信息,然后我发送到服务器。

我可以使用 ViewModel 登录用户或更新用户信息吗?如果没有,我应该改用什么?

我需要什么

这个改造 2 调用应该能够承受配置更改,如旋转屏幕,并且不会导致内存泄漏。

我尝试了什么

  1. 在 MainActivity 中使用 enqueue() 方法调用改造。 Obs:这种方法不好,因为它在 ui 类中放置了很多东西,它会引发内存泄漏。

  2. 使用静态内部类。 Obs: 它无法在配置更改后继续存在,因为我需要取消 onDestroy() 中的任务。

  3. MVP 似乎可以登录用户。

【问题讨论】:

    标签: android mvvm retrofit2 viewmodel


    【解决方案1】:

    你可以查看谷歌示例项目,特别是这个类

    https://github.com/googlesamples/android-architecture/blob/todo-mvvm-databinding/todoapp/app/src/main/java/com/example/android/architecture/blueprints/todoapp/addedittask/AddEditTaskViewModel.java

    通常你会在模型视图中触发网络操作,而实现网络逻辑的代码写在不同的类中(例如ApiManager),然后在你的ViewModel中获取结果

    • LoginViewModel 将拥有某个网络管理器类的对象

    • 点击登录时,viewmodel会调用networkManager.performLogin()

    • 然后将结果传递给视图模型(RxJava 在这里很方便)。

    • 当您收到结果时,在您的 ViewModel 中执行您需要的任何处理

    【讨论】:

    • 首先感谢您的帮助!在这种谷歌方法中,我不需要像 this 那样扩展 ViewModel?
    • 您是决定这一点的人,MVVP 只是一种架构,它会告诉您如何组织您的代码和应用程​​序组件。在代码的视图模型组件中扩展 Google 的 ViewModel 类将使您能够更可靠地控制生命周期事件并减轻生命周期事件管理的负担。作为建议,我会告诉您扩展 ViewModel 类。我希望这能回答你的问题@SoonSantos
    • 帮助很大,我对这个话题有点困惑。我找到了这个tutorial,这正是我想要的。它是使用改造 2、匕首 2、MVVM 和 LiveData 登录。
    猜你喜欢
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 2019-10-24
    • 2012-11-29
    • 2014-01-31
    • 1970-01-01
    相关资源
    最近更新 更多