RxAndroid学习笔记(一)

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:也相当于一个定时器发送值

posted @ 2017-12-21 22:30  我的网名  阅读(23)  评论(0)    收藏  举报