目前,我正在使用ViewModel在我的应用程序中加载节目列表。然后,我在主屏幕上显示它。它可以在配置更改后幸存下来,并且不会引发内存泄漏,因为 ViewModel 具有此功能。
现在我需要做一些不同的事情。我需要登录一个用户,使用改造 2 和 rxjava 2 对端点进行网络调用,他将输入电子邮件和密码,然后将被重定向到 MainActivity。其次,我还需要更新用户信息,他输入他的新信息,然后我发送到服务器。
我可以使用 ViewModel 登录用户或更新用户信息吗?如果没有,我用什么灵魂代替?
我需要什么
此改造 2 调用应能够承受配置更改,如旋转屏幕,并且不会导致内存泄漏。
我尝试了什么
-
在 MainActivity 中使用 enqueue(( 方法调用 retrofit。观察:这种方法不好,因为它在 ui 类中放置了很多东西,它会引起内存泄漏。
-
使用静态内部类。观察:它不能在配置更改中幸存下来,因为我需要在 onDestroy(( 中取消任务。
-
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
通常,您会在模型视图中触发网络操作,而用于实现网络逻辑的代码是用不同的类(例如ApiManager
(编写的,然后在ViewModel中获取结果
-
LoginViewModel
将具有某个网络管理器类的对象 -
单击登录时,视图模型将调用
networkManager.performLogin()
-
然后将结果传递给视图模型(RxJava在这里很方便(。
-
在 ViewModel 中,当您收到结果时,执行所需的任何处理