RxAndroid和RxJava的简单使用

RxAndroid和RxJava的简单使用

近段时间非常火的RxAndroid和RxJava,炒的我心里痒痒的,于是抽空了解了一下基本的使用

配置:

在module的build.grade文件中添加依赖
    compile 'io.reactivex:rxjava:1.1.0'
    compile 'io.reactivex:rxandroid:1.1.0'




使用:
1.在子线程中将数据传入,经过一定处理后过滤结果到主线程中,执行完成后切换到主线程
 Observable.just("12") .map(new Func1<String, Object>() {
            @Override
            public Object call(String s) {
if(TextUtils.isEmpty(s)){
return 0;
}
                return Integer.parseInt(s);
            }
        }).subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Object>() {
            @Override
            public void call(Object s) {
//处理s
            }
        });

说明:just("12")的意思是将数据12传入到map()的回调接口call(s)中,map的参数是个接口Func1,接口中有一个未实现的方法call,其中参数s就是just("12")中传入的数据"12"了,在回调方法call中处理逻辑,最后将处理后的结果返回,最终该结果就会传入到Action1接口的回调方法call的参数中,在这里可以看到,线程的切换非常灵活,只需这样:Observable.subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()) 就可以将前面部分逻辑在io线程中执行,执行完后切换到主线程执行,逻辑非常简洁


2.在子线程中执行耗时操作,执行完成后将结果返回然后过滤,然后将过滤后的结果返回到主线程中执行
Observable<String>getInfo(){
//耗时操作...
return "888";
}


getInfo().map(new Func1<String, Object>() {
            @Override
            public Object call(String s) {
if(TextUtils.isEmpty(s)){
return 0;
}
                return Integer.parseInt(s);
            }
        }).subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Action1<Object>() {
            @Override
            public void call(Object s) {
//处理s
            }
        });


3.将数据传入到子线程中执行耗时操作,然后将数据传入主线程中执行回调


final int x=10;
 Observable.create(new Observable.OnSubscribe<Object>() {
            @Override
            public void call(Subscriber<? super Object> subscriber) {
                Log.i(this.getClass().getName(),"call");
if(x==1){
subscriber.onError(new Exception("错误了"));
}
//...其他耗时操作
if(x==8){
subscriber.onNext(x);
               subscriber.onCompleted();
}
            }
        }).subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Object>() {
            @Override
            public void onCompleted() {
                Log.i(this.getClass().getName(),"onCompleted");
            }


            @Override
            public void onError(Throwable e) {
                Log.i(this.getClass().getName(),"onError"+e.getMessage());
            }


            @Override
            public void onNext(Object o) {
                Log.i(this.getClass().getName(),"onNext"+o);
            }
        }


这里需要注意的是,使用create(OnSubscribe)时最好是结合subscribe(Subscriber)的回调函数使用,这样一来,才能在
切换到主线程时回调接口中处理UI线程,否则在create方法的参数回调实现中只能处理一些基本的逻辑,无法切换到主线程中
回调显示UI


4.在2的子线程中过滤数据,最后在主线程中回调


//可以是retrofit的网络请求接口
Observable<String>getInfo(){
//耗时操作...
return "888";
}




getInfo().map(new Func1<String, Object>() {
            @Override
            public Object call(String s) {
if(TextUtils.isEmpty(s)){
throw new Exception("空或者null");
}
                return Integer.parseInt(s);
            }
        }).subscribeOn(Schedulers.io())
                .unsubscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread()) .subscribe(new Subscriber<Object>() {
            @Override
            public void onCompleted() {
//执行完成了next回调方法后就会调用该回调接口完成回调
                Log.i(this.getClass().getName(),"onCompleted");
            }


            @Override
            public void onError(Throwable e) {
//map过滤接口中抛出异常或者网络无法连接都会回调该接口
                Log.i(this.getClass().getName(),"onError"+e.getMessage());
            }


            @Override
            public void onNext(Object o) {
//数据能正常返回就会回调该接口
                Log.i(this.getClass().getName(),"onNext"+o);
            }

        }


几个简单的demo,方便初学者参考使用




RxAndroid 是基于 RxJava 的一个用于 Android 平台的响应式编程框架,它可以帮助我们更加方便地处理异步事件。下面是 RxAndroid简单使用示例: 1. 添加依赖 首先,在项目的 build.gradle 文件中添加以下依赖: ``` dependencies { implementation 'io.reactivex.rxjava2:rxandroid:2.1.1' } ``` 2. 创建 Observable 使用 RxAndroid,我们可以通过 Observable 来创建一个发射事件的数据源。例如,我们可以创建一个字符串序列的 Observable,代码如下: ``` Observable<String> observable = Observable.just("Hello", "RxAndroid"); ``` 3. 创建 Observer 接下来,我们需要创建一个 Observer 来观察 Observable 发射的事件。Observer 是一个接口,我们需要实现其中的方法来处理事件。例如,我们可以创建一个打印事件的 Observer,代码如下: ``` Observer<String> observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) { // do nothing } @Override public void onNext(String s) { Log.d(TAG, s); } @Override public void onError(Throwable e) { // do nothing } @Override public void onComplete() { // do nothing } }; ``` 4. 订阅事件 最后,我们需要将 Observable 和 Observer 进行订阅,即将 Observer 注册到 Observable 中。代码如下: ``` observable.subscribe(observer); ``` 这样,我们就可以看到 "Hello" 和 "RxAndroid" 这两个字符串被打印出来了。 RxAndroid 还提供了很多其他的操作符,例如 map、filter、zip 等,可以帮助我们更加方便地处理事件。如果您想深入了解 RxAndroid,建议您阅读官方文档或者相关书籍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值