希望你们做得好,
我一直在使用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
的{{1}}
Issue
但是我的代码似乎有一些实现问题因为它从来没有从网络发出任何东西,甚至在调用错误时都没有。
我已经使用Retrofit API获得的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();
}
}
测试了相同的示例,因此没有改装错误,因此我认为我的Observable
逻辑存在一些问题。
任何帮助将不胜感激
答案 0 :(得分:2)
在第一次解析时,我认为您可能正在主线程中进行网络调用。你试过以下这个吗?
public Observable<List<Issue>> getIssues(String queryText) {
String[] query_params = queryText.split("/");
return gitHubApiService.getIssues(query_params[0], query_params[1], "open")
.subscribeOn(Schedulers.io());
}
事实是,你的onClickListener
回调在主线程上运行,并且在可观察的管道中没有其他上下文切换。