我正在尝试将此MVVM用于我的android应用。我已经完成了许多应用程序,但是我试图在另一个层次上尝试使用MVVM。但是我需要了解从互联网上加载数据的位置。我正在使用RxJava,但不确定是否仅在ViewModel中加载数据。如果是这样,那我该在哪里设置数据。我正在使用Google的数据绑定(bind),但是我不想通过viewModel在xml中设置数据。我想从Java文件中进行设置。
对不起,如果我写错了什么,请发布答案,我将尝试填写所有必填信息。
最佳答案
“触发DataLoad”是表示逻辑的一部分。因此,这应该属于ViewModel。
有关“如何加载数据”的详细信息(例如,网络逻辑)不属于ViewModel层。我强烈建议您使用Retrofit,因为您已经在使用RxJava。
由于rx.Observable
和databinding.ObservableField
非常相似,因此您可以将它们从一种形式转换为另一种形式。我写了一个library,它可以让您执行此操作。有关实现,请参见FieldUtils.java。
无论哪种方式,假设您都有DataService
接口(interface)/类:
public interface DataService {
Observable<String> loadSomeData();
}
您可以按照以下方式构建ViewModel:
public class ExampleViewModel {
ObservableField<String> title;
public ExampleViewModel(DataService dataService) {
this.title = FieldUtils.toField(dataService.loadSomeData());
}
}
然后,您可以使用数据绑定(bind)语法在 View 中显示此内容
<TextView
android:text="@{viewModel.title}" />
我最近写了关于将RxJava与MVVM结合使用的博客。我展示了一个应用程序,该应用程序使用Retrofit从Github加载事件列表,并在RecyclerView中显示它们。这已在MVVM中实现。
文章链接:
MVVM using RxJava + Data Binding example: Loading data using Retrofit
一个更复杂的示例,其中还显示了加载指示符和错误:DataLoadingViewModel.java。
关于android - MVVM-从Internet加载数据的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39891603/