rxjava学习(创建Observable)

 

1、扩展的观察者模式

onComoleted()事件

onError()事件

2、四要素

1)Observable被观察者

2)Observer观察者

3)subscribe订阅

4)事件

3、hello World

说明:onCompleted()和onError()只回调一个

package rxjava;

import rx.Observable;
import rx.Subscriber;

public class HelloWorld {

    public static void main(String[] args) {
        //第一步:创建被观察者
        Observable mObservable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("hello world!!!");
                subscriber.onCompleted();
                //subscriber.onError(new NullPointerException());
            }
        });

        //创建观察者
        Subscriber subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }

            @Override
            public void onError(Throwable throwable) {
                System.out.println("onError():" + throwable.getMessage());
            }

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


        };

        //订阅事件
        mObservable.subscribe(subscriber);

    }
}

运行结果:

onNext():hello world!!!
onCompleted()

4、Creating Observables(创建Observable)

(1)Create

 Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("create!!!");
            }
        }).subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }

            @Override
            public void onError(Throwable throwable) {

            }

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

运行结果:

onNext():create!!!

注意,只打印onNext()

(2)Just

Observable.just("just").subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }

            @Override
            public void onError(Throwable throwable) {

            }

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

运行结果:

onNext():just
onCompleted()

注意,先打印onNext()再打印onCompleted()

(3)From

1)数组

Observable.from(new Integer[]{1, 2, 3, 4, 5, 6, 7, 8, 9}).subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext():" + integer);
            }

        });

运行结果:

onNext():1
onNext():2
onNext():3
onNext():4
onNext():5
onNext():6
onNext():7
onNext():8
onNext():9
onCompleted()

2)list

 ArrayList<Integer> items = new ArrayList<>();
        for (int i = 0; i < 10; i++) {
            items.add(i);
        }

        Observable.from(items).subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }

            @Override
            public void onError(Throwable throwable) {

            }

            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext():" + integer);
            }

        });

运行结果:

onNext():0
onNext():1
onNext():2
onNext():3
onNext():4
onNext():5
onNext():6
onNext():7
onNext():8
onNext():9
onCompleted()

(4)Defer

1)如果valueStr为空

  private static String valueStr;

    private static void defer() {
        //在调用subscribe这个方法之前不会去创建Observable对象
        Observable observable = Observable.defer(new Func0<Observable<String>>() {
            @Override
            public Observable<String> call() {
                return Observable.just(valueStr);
            }
        });

        observable.subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }

            @Override
            public void onError(Throwable throwable) {

            }

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

运行结果:

onNext():null
onCompleted()

2)如果valueStr不为空

private static String valueStr;

    private static void defer() {
        //在调用subscribe这个方法之前不会去创建Observable对象
        Observable observable = Observable.defer(new Func0<Observable<String>>() {
            @Override
            public Observable<String> call() {
                return Observable.just(valueStr);
            }
        });

        valueStr = "rxjava";

        observable.subscribe(new Subscriber<String>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted()");
            }

            @Override
            public void onError(Throwable throwable) {

            }

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

运行结果:

onNext():rxjava
onCompleted()

(5)Empty/Never/Throw

//创建一个不发射任何数据但是正常终止的Observable
        Observable.<String>empty().subscribe(new Observer<String>() {
            @Override
            public void onNext(String s) {
                System.out.println("onNext():" + s);
            }

            @Override
            public void onCompleted() {
                System.out.println("onCompleted():");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError:" + e.getMessage());
            }
        });

运行结果:onCompleted():

 

 //创建一个不发射数据也不终止的Observable
        Observable.<String>never().subscribe(new Observer<String>() {
            @Override
            public void onNext(String s) {
                System.out.println("onNext():" + s);
            }

            @Override
            public void onCompleted() {
                System.out.println("onCompleted():");
            }

            @Override
            public void onError(Throwable e) {
                System.out.println("onError:" + e.getMessage());
            }
        });

运行结果:什么都没打印

(6)Interval

定时器,1s间隔一次

 Observable.<String>interval(1, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                System.out.println("aLong:" + aLong);
            }
        });

        while (true) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

运行结果:

aLong:0
aLong:1
aLong:2
aLong:3
aLong:4
aLong:5
aLong:6
aLong:7
aLong:8
aLong:9
aLong:10
aLong:11
aLong:12
aLong:13
aLong:14

还会一直打印下去。

(7)Range

Range操作符发射一个范围内的有序整数序列,你可以指定范围的起始和长度。

RxJava将这个操作符实现为range函数,它接受两个参数,一个是范围的起始值,一个是范围的数据的数目。如果你将第二个参数设为0,将导致Observable不发射任何数据(如果设置为负数,会抛异常)

Observable.<String>range(2, 10).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println("integer:" + integer);
            }
        });

        while (true) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

运行结果:

integer:2
integer:3
integer:4
integer:5
integer:6
integer:7
integer:8
integer:9
integer:10
integer:11

从2到11,一共10个

(8)Repeat

创建一个发射特定数据重复多次的Observable

Observable.range(1, 2).repeat(3).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println("-------->" + integer);
            }

        });

运行结果:

-------->1
-------->2
-------->1
-------->2
-------->1
-------->2

1到2重复3次

(9)Start

(10)Timer

创建一个Observable,它在一个给定的延迟后发射一个特殊的值

  //它在一个给定的延迟后发射一个特殊的值
        Observable.timer(3, TimeUnit.SECONDS).subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                System.out.println("aLong-------->" + aLong);
            }
        });

        while (true) {
            try {
                Thread.sleep(10);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }

运行结果:aLong-------->0

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章