RxJava的初步使用(一)

一直听说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():用来对象的转换。例子:

 	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())
这样便可以灵活切换线程



  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值