带有 RxJava 的 MVVM,没有数据绑定
MVVM with RxJava without DataBinding
看了很多关于MVVM和RxJava的文章后,我需要实现一个最简单的demo,在不使用DataBinding的情况下很好地抓住思路
但我在 ViewModel 如何将数据列表通知 View (Activity) 时遇到了问题
我的 ViewModel 包含以这种方式使用 RxJava 的 fetchGitHub()
io.reactivex.Observable<List<Repo>> reposReturnedObservable = githubClient.reposForUser(user);
reposReturnedObservable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Repo>>() {
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(List<Repo> repos) {
data = repos;
}
});
此处用数据更新视图缺少的行是什么
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = new ViewModel();
viewModel.fetchGitHub("square");
}
fetchGitHub()
应该 return 一个 Observable
,以便 Activity
可以订阅它。
视图模型:
public class ViewModel {
public Observable<List<Repo>> fetchGitHub(String userName) {
return githubClient.reposForUser(user);
}
}
Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView listSizeTextView = findViewById(R.id.listSizeTextView);
viewModel = new ViewModel();
viewModel.fetchGitHub("square")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> listSizeTextView.setText("list size: " + list.size()));
}
上面的示例没有存储订阅,以便为您提供一个简化的答案,但在实际操作中,请确保像您在示例中所做的那样清除订阅。
看了很多关于MVVM和RxJava的文章后,我需要实现一个最简单的demo,在不使用DataBinding的情况下很好地抓住思路
但我在 ViewModel 如何将数据列表通知 View (Activity) 时遇到了问题
我的 ViewModel 包含以这种方式使用 RxJava 的 fetchGitHub()
io.reactivex.Observable<List<Repo>> reposReturnedObservable = githubClient.reposForUser(user);
reposReturnedObservable
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Repo>>() {
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
@Override
public void onSubscribe(Disposable d) {
compositeDisposable.add(d);
}
@Override
public void onNext(List<Repo> repos) {
data = repos;
}
});
此处用数据更新视图缺少的行是什么
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
viewModel = new ViewModel();
viewModel.fetchGitHub("square");
}
fetchGitHub()
应该 return 一个 Observable
,以便 Activity
可以订阅它。
视图模型:
public class ViewModel {
public Observable<List<Repo>> fetchGitHub(String userName) {
return githubClient.reposForUser(user);
}
}
Activity:
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
TextView listSizeTextView = findViewById(R.id.listSizeTextView);
viewModel = new ViewModel();
viewModel.fetchGitHub("square")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(list -> listSizeTextView.setText("list size: " + list.size()));
}
上面的示例没有存储订阅,以便为您提供一个简化的答案,但在实际操作中,请确保像您在示例中所做的那样清除订阅。