前几天我遇到了踩踏问题。我在想rxJava线程是如何工作的。这段代码不想在另一个线程上运行。
mAPIInterface.getAllProjects(accessToken)
.subscribeOn(Schedulers.newThread())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Project>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
mView.showLoadProgress();
}
@Override
public void onNext(@NonNull List<Project> allProjects) {
projects = allProjects;
mView.hideLoadProgress();
mView.onProjectsLoaded();
}
@Override
public void onError(@NonNull Throwable e) {
mView.hideLoadProgress();
mView.onProjectsLoadError();
}
@Override
public void onComplete() {
}
});
然后我找到了解决方案,但我仍然不确定它是否正常。看起来有一些更好的解决方案:
mAPIInterface.getAllProjects(accessToken)
.subscribeOn(Schedulers.newThread())
.map(new Function<List<Project>, List<Project>>() {
@Override
public List<Project> apply(@NonNull List<Project> projects) throws Exception {
return projects;
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Observer<List<Project>>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
mView.showLoadProgress();
}
@Override
public void onNext(@NonNull List<Project> allProjects) {
projects = allProjects;
mView.hideLoadProgress();
mView.onProjectsLoaded();
}
@Override
public void onError(@NonNull Throwable e) {
mView.hideLoadProgress();
mView.onProjectsLoadError();
}
@Override
public void onComplete() {
}
});
使用map()
中间件可行。但是,每当我需要在另一个线程上运行该进程时,我是否应该使用它?