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

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