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

标签 android mvvm retrofit2 viewmodel

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

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

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

我需要什么

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

我尝试过的

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

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

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

最佳答案

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

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

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

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

  • 当您点击登录时,viewmodel 将调用 networkManager.performLogin()

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

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

关于android - 我可以使用 ViewModel 向服务器发送数据吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52332326/

相关文章:

安卓通讯: Phone to Phone Application Control over 3G

android - 应为 BEGIN_OBJECT 但在第 1 行第 2 列路径处为 BEGIN_ARRAY

android - RxJava2 & Retrofit2 服务类 HTTP 响应码

c# - 如何从 ViewModel 访问 ObservableCollection 中的数据?

android - 使用 Retrofit2 调用 API 来保存和检索 JWT Token

java - 如何为 android 创建 vector 可绘制对象?

android - 在 Android Studio 中启动模拟器时出现问题。

Android:如何更改C语言中的进程名称?

wpf - WPF MVVM Prism 中基于ASP.net的基于表单的身份验证

android - 使用Firebase进行自定义登录将完整监听器添加到 Activity 中