为什么要使用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 =0
09-12 20:44:45.562 31383-31383/cn.xianzaishi.rxjava I/System.out: onNext =1
09-12 20:44:45.562 31383-31383/cn.xianzaishi.rxjava I/System.out: onNext =2
09-12 20:44:45.562 31383-31383/cn.xianzaishi.rxjava I/System.out: onNext =3
09-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方法的用法;(整一篇博客就太长了)!