Android Rxjava的create的基本用法

本文介绍RxJava的基本概念及使用方法,包括如何通过Observable和Observer实现异步操作,简化代码并提升项目的可维护性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

为什么要使用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方法的用法;(整一篇博客就太长了)!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值