导入依赖
def retrofit_version = "2.1.0"
def rxjava_version = "2.0.1"
//RxJava的依赖包
implementation 'io.reactivex.rxjava2:rxjava:' + rxjava_version
//RxAndroid的依赖包
implementation 'io.reactivex.rxjava2:rxandroid:' + rxjava_version
//RxBinding
implementation 'com.jakewharton.rxbinding2:rxbinding:2.1.1'
例子
RxTextView
.textChanges(editText)
//满足一定时间延时后才发射数据
.debounce(1,TimeUnit.SECONDS)
//过滤数据,过滤掉空值
.filter(new Predicate<CharSequence>() {
@Override
public boolean test(CharSequence charSequence) throws Exception {
return charSequence.toString().trim().length()>0;
}
})
//对输入框的监听要在主线程
.subscribeOn(AndroidSchedulers.mainThread())
//模拟请求网络操做,switchMap类似于flatMap,switchMap会丢弃之前的数据
//switchMap将Observable发射的数据集合变换为一个Observables集合,然后只发射这些Observerables最近发射的数据
.switchMap(new Function<CharSequence, ObservableSource<List<String>>>() {
@Override
public ObservableSource<List<String>> apply(CharSequence charSequence) throws Exception {
Log.d(TAG, "flatMap: "+charSequence);
List<String> list = new ArrayList<>();
list.add(charSequence.toString()+"1");
list.add(charSequence.toString()+"2");
return Observable.just(list);
}
})
//对于上面的请求网络的操作,要放在io线程中
.subscribeOn(Schedulers.io())
//事件的消费,切换回主线程
.observeOn(AndroidSchedulers.mainThread())
//事件的消费
.subscribe(new Consumer<List<String>>() {
@Override
public void accept(List<String> strings) throws Exception {
Log.d(TAG, "subscribe: "+strings);
}
});
结果
2018-12-05 00:23:58.359 26487-26520/com.example.zhangyu.myrxjava D/MainActivity: flatMap: 啊啊啊
2018-12-05 00:23:58.365 26487-26487/com.example.zhangyu.myrxjava D/MainActivity: subscribe: [啊啊啊1, 啊啊啊2]
2018-12-05 00:24:02.183 26487-26520/com.example.zhangyu.myrxjava D/MainActivity: flatMap: 啊啊啊吧
2018-12-05 00:24:02.184 26487-26487/com.example.zhangyu.myrxjava D/MainActivity: subscribe: [啊啊啊吧1, 啊啊啊吧2]