【发布时间】:2017-10-19 22:15:45
【问题描述】:
希望你们一切都好,
我一直在使用 RxJava 和 Retrofit 开发个人 Android 项目。这是对 GitHub 问题的搜索请求,当用户单击搜索按钮并使用 PublishSubject 对象发出搜索文本时,我会收到用户的输入。
button.setOnClickListener(view -> {
publishSubject.onNext(editText.getText().toString());
});
我正在使用这样的改造将这个发射映射到Observable
publishSubject.concatMap(dataModel::getIssues)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(this::loadData, this::onError);
public Observable<List<Issue>> getIssues(String queryText) {
String[] query_params = queryText.split("/");
return gitHubApiService.getIssues(query_params[0], query_params[1], "open");
}
结果我期待List 的Issues
public void loadData(List<Issue> issues) {
mProgressDialog.setVisibility(View.INVISIBLE);
if( issues.size() == 0) {
noIssueText.setVisibility(View.VISIBLE);
} else {
mRecyclerView.setVisibility(View.VISIBLE);
mIssuesList.clear();
mIssuesList.addAll(issues);
mAdapter.notifyDataSetChanged();
}
}
但我的代码似乎有一些实现问题,因为它从不从网络发出任何东西,即使在错误时也不会被调用。
我已经使用从 Retrofit API 获得的 Observable 测试了相同的示例,所以没有改造错误,所以我认为我的 concatMap 逻辑存在一些问题。
任何帮助将不胜感激
【问题讨论】:
-
.subscribeOn(Schedulers.computation())你应该订阅io,因为你正在做 io,那里 -
试过了,但没有成功,但解决了它在 getIssues 方法中添加 scheduleOn ,如下面的答案
标签: android rx-java retrofit2 flatmap concatmap