我想使用这个MVVM为我的android应用程序。我做了很多应用程序,但我试图在另一个层面上尝试使用MVVM。但我需要了解我应该从哪里加载互联网的数据。我正在使用RxJava,但我不确定是否应该只在ViewModel中加载数据。如果是这样,那么我在哪里设置数据。我使用谷歌的Databinding,但我不想通过viewModel在xml中设置数据。我想从java文件中设置它。MVVM - 从哪里加载数据从互联网
对不起,如果我误写了某些内容,发布了答案,我会尝试填写所需的任何信息。
我想使用这个MVVM为我的android应用程序。我做了很多应用程序,但我试图在另一个层面上尝试使用MVVM。但我需要了解我应该从哪里加载互联网的数据。我正在使用RxJava,但我不确定是否应该只在ViewModel中加载数据。如果是这样,那么我在哪里设置数据。我使用谷歌的Databinding,但我不想通过viewModel在xml中设置数据。我想从java文件中设置它。MVVM - 从哪里加载数据从互联网
对不起,如果我误写了某些内容,发布了答案,我会尝试填写所需的任何信息。
“触发DataLoad”是表示逻辑的一部分。因此,这应该属于ViewModel。
有关“数据如何加载”的详细信息,例如联网逻辑,不属于ViewModel层。我强烈建议您使用Retrofit,因为您已经在使用RxJava。
由于rx.Observable
和databinding.ObservableField
非常相似,您可以将它们从一种形式转换为另一种形式。我写了一个library,允许你这样做。有关实现请参见FieldUtils.java。
无论哪种方式,假设你有一个DataService
接口/类:
public interface DataService {
Observable<String> loadSomeData();
}
,你可以建立你的视图模型如下:
public class ExampleViewModel {
ObservableField<String> title;
public ExampleViewModel(DataService dataService) {
this.title = FieldUtils.toField(dataService.loadSomeData());
}
}
然后,您可以使用数据绑定在你的视图显示此语法
<TextView
android:text="@{viewModel.title}" />
我最近在博客上介绍如何使用RxJava wi第MVVM。我展示了一个应用程序,它使用Retrofit从Github加载事件列表,并将它们显示在RecyclerView中。这已经在MVVM中实现。
条链路: MVVM using RxJava + Data Binding example: Loading data using Retrofit
一个更复杂的例子,其还示出了负载指示器和错误:DataLoadingViewModel.java。
有两种类似的架构模式 - MVP和MVVM。主要区别在于MVP parttern Presenter决定如何显示数据,但在MVVM模式下,View收到Model并呈现自身(从模型中获取数据)。古典MVVM的例子是view bindig。但重点是 - 您使用的模式不重要,您应该获取模型中的所有数据 - 并将所有业务逻辑放置在模型中。
因此,如果我理解正确,我应该加载,工作并将数据保存在ViewModel中,然后通过ViewModel将其设置为View。所以视图本身对数据的操作几乎为零?对不起,我只是想正确理解模式。 – Bartando
谢谢你的回答我很感激。可悲的是,我必须亲自学习它(我花了几天的时间学习其他项目)。回到答案中,我实际上是在使用RxJava的项目中使用Retrofit。我现在明白我需要在ViewModel中加载数据,并且通过它设置绑定。但是,例如,我不确定是否可以在视图(活动)中设置RecyclerView。另外我想知道,为什么不使用@Bindable而不是ObservableField(即使它看起来相同,至少对我来说),如果有一些不同,也让我知道。再一次感谢你 :) – Bartando