Skip to content

Instantly share code, notes, and snippets.

@tuannha95
Forked from snijsure/RxSearchObservable.java
Created August 18, 2021 06:59
Show Gist options
  • Save tuannha95/f30de3a953fe642bb97fb21c5b40f1ea to your computer and use it in GitHub Desktop.
Save tuannha95/f30de3a953fe642bb97fb21c5b40f1ea to your computer and use it in GitHub Desktop.
Implement search using RxJava
public class RxSearchObservable {
public static Observable<String> fromView(SearchView searchView) {
final PublishSubject<String> subject = PublishSubject.create();
searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String s) {
subject.onComplete();
return true;
}
@Override
public boolean onQueryTextChange(String text) {
subject.onNext(text);
return true;
}
});
return subject;
}
}
RxSearchObservable.fromView(searchView)
.debounce(300, TimeUnit.MILLISECONDS)
.filter(new Predicate<String>() {
@Override
public boolean test(String text) throws Exception {
if (text.isEmpty()) {
return false;
} else {
return true;
}
}
})
.distinctUntilChanged()
.switchMap(new Function<String, ObservableSource<String>>() {
@Override
public ObservableSource<String> apply(String query) throws Exception {
return dataFromNetwork(query);
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String result) throws Exception {
textViewResult.setText(result);
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment