я обращенный к NetworkOnMainThreadException
на AsyncSubject
даже тогда, когда я применяю планировщик в возвращающей Observable
. Зачем нам нужно использовать Schedulers
на Subject
?NetworkOnMainThread использования AsyncSubject RxJava в Android
Я пропустил это объяснение в javadocs от Subjects
, почему Subject
идет в основной теме, если мы его не сочиняем? Может ли кто-нибудь указать документацию, объясняющую это?
Для иллюстрации сценария приведен пример кода ниже.
Это случай использования:
/*** Makes a network call to retrieve a search result, it returns an Observable<SearchResult> */
private Observable<SearchResult> call(String searchQuery){
return mSearchWebService.call(searchQuery);
}
/* Same code but with a a NetworkOnMainThreadException */
private Observable<SearchResult> call(String searchQuery){
final Subject<SearchResult, SearchResult> subject = AsyncSubject.create();
mSearchWebService.call(“let me google something”)
.subscribe(subject::onNext, subject::onError, subject::onCompleted);
// When we apply the schedulers in the subject, it works fine, but why it doesn’t apply the schedulers of the observables?
// This works: mSearchWebService.call(“let me google something”)
// .compose(mBackgroundThreadTransformer.applySchedulers())
// .subscribe(subject::onNext, subject::onError, subject::onCompleted);
return subject;
}
Это код в выступающем:
private void onSearchButtonClicked(){
searchUseCase.call(“let me google something”).compose(mBackgroundThreadTransformer.applySchedulers())
.subscribe(searchResult -> show(searchResult),
e -> Timber.d(e, "Failed to search”)));
}