Few things:
I'm not sure why each time you transfer text change events to a new Observable, and not just pass them on to your Subject immediately:
So, instead of:
@OnTextChanged(R.id.ed)
public void onTextEntered(CharSequence charsEntered) {
searchTextEmitterSubject.onNext(getASearchObservableFor(charsEntered.toString()));
}
try the following:
@OnTextChanged(R.id.ed)
public void onTextEntered(CharSequence charsEntered) {
searchTextSubject.onNext(charsEntered.toString());
}
, PublishSubject<String> PublishSubject<Observable<String>>.
onNextSwitch debounce .
, ViewObservables Android rxjava. , :
Observable<OnTextChangeEvent> searchTextObservable = ViewObservable.text(tvSearch);
A OnTextChangeEvent , TextWatcher afterTextChanged ( ButterKnife onTextChanged, ).
, - Observable, :
@OnTextChanged(R.id.ed)
public void onTextEntered(CharSequence charsEntered) {
searchTextEmitterSubject.onNext(
Observable.just(charsEntered.toString())
);
}
, subscribeOn(Schedulers.io()) - - . - ?
, flatMap ( Observable<OnTextChangeEvent>):
searchTextObservable
.debounce(100, TimeUnit.MILLISECONDS)
.flatMap(new Func1<OnTextChangeEvent, Observable<Point>>() {
@Override
public Observable<Point> call(OnTextChangeEvent event) {
final String string = event.text.toString();
AlbumEndpoint albumEndpoint = API.getRestAdapter().create(AlbumEndpoint.class);
Observable<Point> pointObservable = albumEndpoint.searchPoint(string);
return AndroidObservable.bindActivity((Activity) getContext(), pointObservable);
}
})
.observeOn(AndroidSchedulers.mainThread())
.subscribe(mAdapterDataObserver);
pointObservable -, albumEndpoint .
, !
EDIT: , , OnTextChangeEvent. rx-android - :
https://github.com/ReactiveX/RxAndroid/blob/0.x/src/main/java/rx/android/events/OnTextChangeEvent.java
POJO, EditText, , EditText. - , flatMap.