RxJava concatMap 无响应

RxJava concatMap no response

希望你们一切顺利, 我一直在使用 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");
}

结果我期望 ListIssue

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 逻辑存在一些问题。 任何帮助将不胜感激

第一次解析时,我认为您可能是在主线程中进行网络调用。您是否尝试过以下方法?

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 回调在主线程上运行,可观察管道中没有其他上下文切换。