RxJava concatMap нет ответа
Надеюсь, у вас, ребята, все хорошо, я работаю над личным проектом Android, используя RxJava и Retrofit. Это поисковый запрос для проблем 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
из Issue
s
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
Я получаю от Retrofit API, поэтому нет ошибки дооснащения, и поэтому я думаю, что есть некоторые проблемы с моим concatMap
логика. Любая помощь будет высоко ценится
1 ответ
При первом разборе я думаю, что вы можете делать сетевой вызов в главном потоке. Вы пробовали следующее?
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
обратный вызов выполняется в главном потоке, и в наблюдаемом конвейере нет другого переключателя контекста.