MVVM - 从互联网

时间:2016-10-06 08:50:41

标签: android mvvm

我试图将这个MVVM用于我的Android应用程序。我已经完成了很多应用程序,但是我试图在另一个级别上尝试使用MVVM。但我需要了解我应该从互联网上加载数据的位置。我使用的是RxJava,但我不确定是否只应在ViewModel中加载数据。如果是,那么我在哪里设置数据。我使用谷歌的数据绑定,但我不想通过viewModel在xml中设置数据。我想从java文件中设置它。

对不起,如果我误写了某些内容,发布了答案,我将尝试填写任何必要的信息。

2 个答案:

答案 0 :(得分:1)

“触发DataLoad”是表示逻辑的一部分。因此,这应属于ViewModel。

有关“如何加载数据”的详细信息(例如,网络逻辑)不属于ViewModel层。我强烈建议您使用Retrofit,因为您已经在使用RxJava。

由于rx.Observabledatabinding.ObservableField非常相似,您可以将它们从一种形式转换为另一种形式。我写了library,允许你这样做。有关实施,请参阅FieldUtils.java

无论哪种方式,假设您有DataService接口/类:

public interface DataService {
   Observable<String> loadSomeData();
}

您可以按如下方式构建ViewModel:

public class ExampleViewModel {
    ObservableField<String> title;

    public ExampleViewModel(DataService dataService) {
        this.title = FieldUtils.toField(dataService.loadSomeData());
    }
}

然后,您可以使用数据绑定语法在您的视图中显示它

<TextView
    android:text="@{viewModel.title}" />

我最近写了一篇关于将RxJava与MVVM一起使用的博文。我展示了一个应用程序,它使用Retrofit从Github加载一系列事件,并在RecyclerView中显示它们。这已在MVVM中实现。

文章链接: MVVM using RxJava + Data Binding example: Loading data using Retrofit

一个更复杂的示例,它还显示了加载指示符和错误:DataLoadingViewModel.java

答案 1 :(得分:0)

有两种类似的架构模式 - MVP和MVVM。主要区别在于MVP parttern Presenter决定如何显示数据,但在MVVM模式中View接收Model并呈现自身(从模型中获取数据)。经典的MVVM示例是view bindig。但重点是 - 无论您使用什么模式,您应该获取模型中的所有数据 - 并将所有业务逻辑也放在模型中。