我可以使用 ViewModel 向服务器发送数据吗?

Can I use ViewModel to send data to the server?

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

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

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

我需要的

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

我试过的

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

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

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

您可以查看 google 示例项目,特别是这个 class

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

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

  • LoginViewModel 将拥有某个网络管理员的对象 class

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

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

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