Android Rxjava的create的基本用法

来源:互联网 发布:李明linux百度云资源 编辑:程序博客网 时间:2024/06/10 12:05

为什么要使用rxjava呢? 如果你的代码比较少,可能感受不到他的魅力, 如果你的项目比较的大, 那你就会很幸福; 还记得asycntask异步任务, 只有doInbackground 只能在子线程中运行,其他都是在ui线程运行, 第一次用的时候有没有感觉这个真好用, 不用考虑那么多线程切换问题, 而rxjava跟他基本一样, 简化我们的异步操作, 是代码整洁明了; 他的特点就是: 简洁;ok, 话有点多了, 有没有很心急的,哈哈, 直接撸代码!

1.添加依赖

compile 'io.reactivex:rxjava:1.0.14'compile 'io.reactivex:rxandroid:1.0.1'

2.角色说明
Observable 被观察者
Observer 观察者
Subsriber 订阅者(也可以理解为观察者)
3.基本用法(1)

 //1 创建被观察者        //参数说明: Interger就是我们要观察的对象;        Observable<Integer> observable = Observable.create(new Observable.OnSubscribe<Integer>() {            //参数说明, subscriber是订阅者,也称观察者,二者有一点小小的却别,基本一样;            //这里是一个回调, 回调外面的观察者的onNext方法和onCompleted方法;            @Override            public void call(Subscriber<? super Integer> subscriber) {                for (int i = 0; i < 4; i++) {                    subscriber.onNext(i);                }                subscriber.onCompleted();            }        });        //2 创建观察者, 参数说明: new Observer<Integer>()表示的是这个观察者订阅了observable,        //你可能问,是observable订阅了observer,英语就是则麽神奇;        observable.subscribe(new Observer<Integer>() {            //会在被观察者那里调用,回调到这里            @Override            public void onCompleted() {                System.out.println("onCompleted");            }            //产生异常是后回调            @Override            public void onError(Throwable e) {                System.out.println("onError");            }            //这个方法就不多说了;            @Override            public void onNext(Integer integer) {                System.out.println("onNext =" + integer + "\n");            }        });

结果输出:

09-12 20:44:45.562 31383-31383/cn.xianzaishi.rxjava I/System.out: onNext =009-12 20:44:45.562 31383-31383/cn.xianzaishi.rxjava I/System.out: onNext =109-12 20:44:45.562 31383-31383/cn.xianzaishi.rxjava I/System.out: onNext =209-12 20:44:45.562 31383-31383/cn.xianzaishi.rxjava I/System.out: onNext =309-12 20:44:45.562 31383- /cn.xianzaishi.rxjava I/System.out: onCompleted```m结果分析: 调用了4次onNext , 一次onCompleted,次数刚好和上面的for 语句的循环次数加上subscriber.onCompleted();一样, 是不是懂了rxjava的原理了, 其实质就是观察者模式(这好像是废话, 英文单词的意思就看的出).其实上面的代码可以写成连式;<div class="se-preview-section-delimiter"></div>

//1 创建被观察者
//参数说明: Interger就是我们要观察的对象;
Observable.create(new Observable.OnSubscribe() {

        //参数说明, subscriber是订阅者,也称观察者,二者有一点小小的却别,基本一样;        //这里是一个回调, 回调外面的观察者的onNext方法和onCompleted方法;        @Override        public void call(Subscriber<? super Integer> subscriber) {            for (int i = 0; i < 4; i++) {                subscriber.onNext(i);            }            subscriber.onCompleted();        }    }).subscribe(new Observer<Integer>() {        //会在被观察者那里调用,回调到这里        @Override        public void onCompleted() {            System.out.println("onCompleted");        }        //产生异常是后回调        @Override        public void onError(Throwable e) {            System.out.println("onError");        }        //这个方法就不多说了;        @Override        public void onNext(Integer integer) {            System.out.println("onNext =" + integer + "\n");        }    });;

为什么可以是连式呢? 上面的那个的返回值和下面的调用者是一个啊(是不是说的太详细了,这样一篇博客就太长了);

下面是异常情况:<div class="se-preview-section-delimiter"></div>

//我们在上面的for语句里面加上一个if判断,制造错误;
for (int i = 0; i < 4; i++) {
if (i == 2) {
int a = i / 0;
}
subscriber.onNext(i);
}

结果输出:<div class="se-preview-section-delimiter"></div>

09-12 20:50:45.269 6409-6409/cn.xianzaishi.rxjava I/System.out: onNext =0
09-12 20:50:45.269 6409-6409/cn.xianzaishi.rxjava I/System.out: onNext =1
09-12 20:50:45.282 6409-6409/cn.xianzaishi.rxjava I/System.out: onError

结果分析:<div class="se-preview-section-delimiter"></div>

从这个结果和上面没加if语句的结果我们就可以知道,一旦被观察者里面出现异常,就会毁掉观察者的onError方法,而且onCompleted和他是敌对关系,有你没我,有我没你;
“`
到这里rxjava里面的最基本用法差不多了;

下篇博客讲述from方法的用法;(整一篇博客就太长了)!

0 0
原创粉丝点击