RxJava的初步使用(一)
2017-03-31 22:15
183 查看
一直听说RxJava很火爆,很多大神也写了很多相关的文章,最近从中开始学习Rxjava,自己总结一些比较简单的使用。RxJava是一种响应式编程,使用了观察者模式。
依赖:compile 'io.reactivex.rxjava2:rxjava:2.0.0-RC5'
compile 'io.reactivex.rxjava2:rxandroid:2.0.0-RC1'
Observable绑定Observer:Observable.subscribe(Observer)
最基本的用法:
Observable<String>observable=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("跳舞");
e.onNext("敲代码");
e.onComplete();
}
});
Observer<String> observer=new Observer<String>() {
@Override public void onSubscribe(Disposable d) { d.dispose(); //解除观察 } @Override public void onNext(String value) { Log.i(TAG, "onNext: ="+value); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } };
//进行绑定
observable.subscribe(observer);
以上的代码表示observable发送了“跳舞”,“敲代码”,Observer在onNext方法中接收数据
Observable:
create():里面需要传进一个ObservOnSubscribe<?>对象,返回的是一个Observable对象
just():发送数据,可以发送多个数据;
fromCallable():里面需要传入一个 Callable对象,该对象里面的call方法发送数据,效果跟以上例子一样
Observable对象的subscribe方法还可以传一个Consumer对象,实现的accept方法用来接收数据
flatMap():用来对象的转换。例子:
这样实现了对象的转换。用户的参数(登录信息)=>id=>用户对象=>发送并进行后续的处理
debounce:限定时间执行
例如一个输入框的监听:
RxTextView.textChanges(this.search)
.debounce(300, TimeUnit.MILLISECONDS)//三百毫秒监听一次
filter:过滤条件
例如锅炉输入框输入的内容是否为空:
.filter(new Predicate<CharSequence>() {//过滤条件
@Override
public boolean test(CharSequence charSequence) throws Exception {
return charSequence.toString().length() > 0;
}
}).switchMap: 用法跟flatMap一样,内部实现不同,Observable集合,发射最近Observable发射的数据
RxView.clicks(button).throttleFirst(时间): 用来事件监听,防止反复点击
例如一秒只能点击一次:
merge: 将所有Observable合并起来,并发送所有Observable要发送的数据
例如将本地发送的数据和发射从网络获取的数据合并:
rx.Observable.merge(getDataFromLocal(),getDataFromNet())
interval:计时器
例如每一秒执行一次:
io.reactivex.Observable.interval(0,1, TimeUnit.SECONDS)
take:执行多少次
例如与计时器结合(执行10次)
io.reactivex.Observable.interval(0,1, TimeUnit.SECONDS)
.take(count+1)
RxJava线程切换:
如果执行耗时操作,
例如网络操作,则可以使用.subscribeOn(rx.schedulers.Schedulers.io())则可以直接切换到io线程中
如果需要切换到主线程,则可以使用:
.observeOn(AndroidSchedulers.mainThread())这样便可以灵活切换线程
依赖:compile 'io.reactivex.rxjava2:rxjava:2.0.0-RC5'
compile 'io.reactivex.rxjava2:rxandroid:2.0.0-RC1'
Observable绑定Observer:Observable.subscribe(Observer)
最基本的用法:
Observable<String>observable=Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception {
e.onNext("跳舞");
e.onNext("敲代码");
e.onComplete();
}
});
Observer<String> observer=new Observer<String>() {
@Override public void onSubscribe(Disposable d) { d.dispose(); //解除观察 } @Override public void onNext(String value) { Log.i(TAG, "onNext: ="+value); } @Override public void onError(Throwable e) { } @Override public void onComplete() { } };
//进行绑定
observable.subscribe(observer);
以上的代码表示observable发送了“跳舞”,“敲代码”,Observer在onNext方法中接收数据
Observable:
create():里面需要传进一个ObservOnSubscribe<?>对象,返回的是一个Observable对象
just():发送数据,可以发送多个数据;
fromCallable():里面需要传入一个 Callable对象,该对象里面的call方法发送数据,效果跟以上例子一样
Observable对象的subscribe方法还可以传一个Consumer对象,实现的accept方法用来接收数据
flatMap():用来对象的转换。例子:
Observable.just(getUserParam()) .flatMap(new Function<UserParam, ObservableSource<String>>() { @Override public ObservableSource<String> apply(UserParam userParam) throws Exception { //loginWithForm() 登录后获取id String id = api.loginWithForm(userParam.getUsername(), userParam.getPassword()) .execute().body(); return Observable.just(id); } }).flatMap(new Function<id, ObservableSource<User>>() { @Override public ObservableSource<User> apply(BaseResult baseResult) throws Exception {
//getUserInfoWithQuery() 可以获取User对象 User user = api.getUserInfoWithQuery(baseResult.getUser_id()).execute().body(); return Observable.just(user); } }));
这样实现了对象的转换。用户的参数(登录信息)=>id=>用户对象=>发送并进行后续的处理
debounce:限定时间执行
例如一个输入框的监听:
RxTextView.textChanges(this.search)
.debounce(300, TimeUnit.MILLISECONDS)//三百毫秒监听一次
filter:过滤条件
例如锅炉输入框输入的内容是否为空:
.filter(new Predicate<CharSequence>() {//过滤条件
@Override
public boolean test(CharSequence charSequence) throws Exception {
return charSequence.toString().length() > 0;
}
}).switchMap: 用法跟flatMap一样,内部实现不同,Observable集合,发射最近Observable发射的数据
RxView.clicks(button).throttleFirst(时间): 用来事件监听,防止反复点击
例如一秒只能点击一次:
RxView.clicks(button).throttleFirst(1, TimeUnit.SECONDS)
merge: 将所有Observable合并起来,并发送所有Observable要发送的数据
例如将本地发送的数据和发射从网络获取的数据合并:
rx.Observable.merge(getDataFromLocal(),getDataFromNet())
//getDataFromLocal方法:获取发射本地数据的Observable,getDataFromNet:获取发射网络数据的Observable
interval:计时器
例如每一秒执行一次:
io.reactivex.Observable.interval(0,1, TimeUnit.SECONDS)
take:执行多少次
例如与计时器结合(执行10次)
io.reactivex.Observable.interval(0,1, TimeUnit.SECONDS)
.take(count+1)
RxJava线程切换:
如果执行耗时操作,
例如网络操作,则可以使用.subscribeOn(rx.schedulers.Schedulers.io())则可以直接切换到io线程中
如果需要切换到主线程,则可以使用:
.observeOn(AndroidSchedulers.mainThread())这样便可以灵活切换线程
相关文章推荐
- RxJava的android初步快速学习与理解使用
- RxJava2.0初步使用
- RxJava初步了解和在Android中的使用
- Retrofit结合Rxjava初步使用
- Mvp-Retrofit-Rxjava-Rxbus的初步使用
- Android RxJava 初步接触二:from,just等方法的使用
- FC4初步使用体验--fox进行更新,添加官方安装指南
- 第一天使用BLOG,写下学习的初步计划
- Ajax使用初步
- [转]C#中TreeView组件使用方法初步
- C#中TreeView组件使用方法初步
- 初步使用STL
- FCKeditor使用初步
- Makefile使用初步
- EVC4 安装与初步使用
- TreeView使用初步
- [转载]Makefile使用初步
- Makefile使用初步
- FCKEditor的初步使用!
- 关于eclipse的初步使用