Android框架——RxJava异步开发框架

介绍

RxJava是ReactiveX的Java实现,通过这个框架我们可以很方便的进行数据的异步获取,并对数据进行分步转换。

RxJava基本使用

引入依赖

    implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'
    implementation 'io.reactivex.rxjava2:rxjava:2.2.3'

创建观察者

首先创建一个观察者,它可以在数据发生改变的时候调用相应的回调函数。

			Subscriber subscriber = new Subscriber<String>() {
   
            @Override
            public void onSubscribe(Subscription s) {
   
                
            }

            @Override
            public void onNext(String s) {
   

            }

            @Override
            public void onError(Throwable t) {
   

            }

            @Override
            public void onComplete() {
   

            }
        };
        	//也可以用Observer创建观察者
	        Observer<String> observer = new Observer<String>() {
   
            @Override
            public void onSubscribe(Disposable d) {
   
                
            }

            @Override
            public void onNext(String s) {
   

            }

            @Override
            public void onError(Throwable e) {
   

            }

            @Override
            public void onComplete() {
   

            }
        };

创建被观察者

接下来创建被观察者,它需要一个ObservableOnSubscribe类型的参数。当Observable对象的subscribe方法被调用时,会调用到ObservableOnSubscribe里的subscribe回调方法,通过对emitter操作,开始向观察者发送事件。

		Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
   
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
   
                emitter.onNext("发送第一个消息");
                emitter.onNext("发送第二个消息");
                emitter.onComplete();
            }
        });
        //也可以这样写,这一行和上面的效果是一样的
        Observable<String> observable2 = Observable.just("发送第一个消息","发送第二个消息");

当Observable的subscribe方法被调用时,会依次发送onNext,onNext,onComplete方法。

关联观察者和被观察者

这里不保存变量了,直接在被观察者的订阅函数里新建并添加一个观察者。

	Observable.create(new ObservableOnSubscribe<String>() {
   
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
   
                emitter.onNext("发送第一个消息");
                emitter.onNext("发送第二个消息");
                emitter.onComplete();
            }
        }).subscribe(new Observer<String>() {
   
            @Override
            public void onSubscribe(Disposable d) {
   
            }

            @Override
            public void onNext(String s) {
   
                System.out.println("我收到了:"+s);
            }

            @Override
            public void onError(Throwable e) {
   
                e.printStackTrace();
            }

            @Override
            public void onComplete() {
   
                System.out.println("已接收全部事件");
            }
        });

被观察者中通过Emitter发送的事件都会按顺序被观察者接收并调用回调方法。

RxJava常见操作符

RxJava为我们提供了许多操作符,种类有创建操作符,变换操作符,过滤操作符,组合操作符,错误处理操作符,辅助操作符,条件和布尔操作符,算术聚合操作符,连接操作符等,以下将介绍一下常用的操作符。

创建操作符

1.interval
可以使用interval操作符起到定时器的作用,每隔一定时间发送一个事件。

Observable.interval(3, TimeUnit.SECONDS).subscribe(new Consumer<Long>() {
   
    @Override
    public void accept(Long aLong) throws Exception {
   
        System.out.println(aLong+"");
    }
});

2.range
range操作符可以发射有序的整数序列,代替for循环,第一个参数不小于0,第二个参数为终值,左闭右开。

 Observable.range(0,5).subscribe(new Consumer<Integer>() {
   
     @Override
     public void accept(Integer integer) throws Exception {
   
         
     }
 });

3.repeat
可以把发送指定数据的过程重复N次。

        Observable.range(0,3).repeat(2).subscribe(new Consumer<Integer>() {
   
            @Override
            public void accept(Integer integer) throws Exception {
   
                
            }
        });

这个调用会发送 0,1,2 两次,发送顺序为0,1,2,0,1,2。

变换操作符

1.map
map操作符可以将事件发送的数据映射成其他数据,例如给数据添加额外的信息,或获取它的某个字段,或包装等等。它的匿名内部类中声明的两个类型分别是处理前和处理后的数据类型。

        Observable.just("人").map(new Function<String, String>() {
   

            @Override
            public String apply(String s) throws Exception {
   
                return "好"+s;
            }
        });

事件的数据就从"人"变成了"好人"。
2.flatMap
这个操作符大概意思就是从发送数组事件展开成一个个单独的事件,具体没搞懂。

Observable.fromArray(1,2,3).flatMap(new Function<Integer, ObservableSource<String>>() {
   
            @Override
            public ObservableSource<String> apply(Integer integer) throws Exception {
   
                return Observable.just(integer+"已处理");
            }
        }).subscribe(
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值