RxAndroid学习笔记(一)

本文介绍了RxJava的基本概念,包括Observable、Observer等关键组成部分,并通过实例演示如何使用RxJava进行异步操作,涵盖just、from及defer等操作符的应用。

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

RxJava是异步操作的一个库,支持被观察者的扩展。
Schedulers(调度器):解决Android主线程和多线程问题。
观察者四大要素:
1. Observable(被观察者)
2. Observer(观察者)
3. subscribe(订阅)
4. 事件
RxJava实战示例
1. 在AndroidStudio中导入compile ‘io.reactivex:rxjava:1.0.14’
2.

public class MainActivity extends AppCompatActivity {
    private String TAG="MainActivity";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.创建观察者
        Observable myOnservable=Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                Log.i(TAG, "call: 回掉");
                //发送事件
                subscriber.onNext("你好,世界~");
                subscriber.onCompleted();
            }
        });
        //2.创建被观察者
        Subscriber subscriber=new Subscriber<String>() {
            @Override
            public void onCompleted() {
                //执行完成
                Log.i(TAG, "onCompleted:");
            }

            @Override
            public void onError(Throwable e) {
                //执行过程中发生错误
            }

            @Override
            public void onNext(String s) {
                //获取到传来的值
                Log.i(TAG, "onNext: "+s);
            }
        };
        //3.订阅事件,被观察者订阅观察者
        myOnservable.subscribe(subscriber);
    }
}

执行结果

12-21 14:16:37.731 2503-2503/demo.com.rxandroiddemo I/MainActivity: call: 回掉
12-21 14:16:37.731 2503-2503/demo.com.rxandroiddemo I/MainActivity: onNext: 你好,世界~
12-21 14:16:37.731 2503-2503/demo.com.rxandroiddemo I/MainActivity: onCompleted:

操作符:
just
创建Observable可以用just(),相当于create();just是将create()代码简化了。
例如

Observable myOnservable=Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                Log.i(TAG, "call: 回掉");
                //发送事件
                subscriber.onNext("你好,世界~");
                subscriber.onCompleted();
            }
        });

相当于这句代码Observable myOnservable=Observable.just("你好,世界~");

from
可以将数组的值或者集合的值传递,例如

 //1.创建观察者
        Observable myOnservable=Observable.from(new Integer[]{1,2,3,4,5,6});
        //2.创建被观察者
        Subscriber subscriber=new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                //执行完成
                Log.i(TAG, "onCompleted:");
            }

            @Override
            public void onError(Throwable e) {
                //执行过程中发生错误
            }

            @Override
            public void onNext(Integer s) {
                //获取到传来的值
                Log.i(TAG, "onNext: "+s);
            }
        };
        //3.订阅事件,被观察者订阅观察者
        myOnservable.subscribe(subscriber);

执行结果

12-21 14:41:46.078 26056-26056/? I/MainActivity: onNext: 1
12-21 14:41:46.079 26056-26056/? I/MainActivity: onNext: 2
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 3
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 4
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 5
12-21 14:41:46.080 26056-26056/? I/MainActivity: onNext: 6
12-21 14:41:46.080 26056-26056/? I/MainActivity: onCompleted:

还有例如传递集合的值

  List<Integer> lists=new ArrayList<>();
        for (int i = 0; i < 6; i++) {
            lists.add(i);
        }
        //1.创建观察者
        Observable myOnservable=Observable.from(lists);
        //下面的代码和上面一样,省略

defer:是被订阅者订阅观察者之后执行的,myOnservable.subscribe(subscriber);在这句代码之后执行里面的回掉

public class MainActivity extends AppCompatActivity {
    private String TAG="MainActivity";
    private String msg="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.创建观察者
        Observable myOnservable=Observable.defer(new Func0<Observable<String>>() {
            @Override
            public Observable call() {
                return Observable.just(msg);
            }
        });
        //2.创建被观察者
        Subscriber subscriber=new Subscriber<String>() {
            @Override
            public void onCompleted() {
                //执行完成
                Log.i(TAG, "onCompleted:");
            }

            @Override
            public void onError(Throwable e) {
                //执行过程中发生错误
            }

            @Override
            public void onNext(String s) {
                //获取到传来的值
                Log.i(TAG, "onNext: "+s);
            }
        };
        msg="练习";
        //3.订阅事件,被观察者订阅观察者
        myOnservable.subscribe(subscriber);
    }
}

可以将练习打印出来
而用just代码则不可以,注:主要是练习赋值的地方不一样

public class MainActivity extends AppCompatActivity {
    private String TAG="MainActivity";
    private String msg="";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1.创建观察者
        Observable myOnservable=Observable.just(msg);
        //2.创建被观察者
        Subscriber subscriber=new Subscriber<String>() {
            @Override
            public void onCompleted() {
                //执行完成
                Log.i(TAG, "onCompleted:");
            }

            @Override
            public void onError(Throwable e) {
                //执行过程中发生错误
            }

            @Override
            public void onNext(String s) {
                //获取到传来的值
                Log.i(TAG, "onNext: "+s);
            }
        };
        msg="练习";
        //3.订阅事件,被观察者订阅观察者
        myOnservable.subscribe(subscriber);

    }
}

Interval:相当于一个定时器,可以定间隔的时间发送一个值
range(int a,int b):从a–>b之间的值依次传递
Repeat(n):n次重复的发送值
start:开始发送一个值
Timer:也相当于一个定时器发送值

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值