RxJava基础练习(1)

//概念解释
//1:被观察者,事件源:它决定什么时候触发事件以及触发怎样的事件
//2:观察者:它决定事件触发的时候将有怎样的行为
//3:订阅
private void method0() {

    //1:被观察者,事件源
    //概念解释:RxJava 使用 Observable.create() 方法来创建一个 Observable ,并为它定义事件触发规则
    Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {
            subscriber.onNext("Hello");
            subscriber.onNext("World");
            subscriber.onNext("!");
            subscriber.onCompleted();
            subscriber.onError(new Throwable());
            Logger.d("被观察者-observable->call()->onCompleted()之后是否还有输出");
        }
    });

    /**
     * 可以看到,这里传入了一个 OnSubscribe 对象作为参数。
     * OnSubscribe 会被存储在返回的 Observable 对象中,它的作用相当于一个计划表,
     * 当Observable 被订阅的时候,OnSubscribe 的 call() 方法会自动被调用,事件序列就会依照设定依次触发
     * (对于上面的代码,就是观察者subscriber 将会被调用三次 onNext() 和一次 onCompleted())。
     * 这样,由被观察者调用了观察者的回调方法,就实现了由被观察者向观察者的事件传递,即观察者模式。
     */
    //2:观察者
    Observer<String> observer = new Observer<String>() {
        @Override
        public void onCompleted() {
            Logger.d("观察者-observer:onCompleted()");
        }

        @Override
        public void onError(Throwable e) {
            Logger.d("观察者-observer:onError" + e.getMessage());
        }

        @Override
        public void onNext(String s) {
            Logger.d("观察者-observer:onNext():" + s);

// getException();//故意让程序出现异常,用于测试onError()方法的执行….
}
};

    //3:订阅--被观察者被观察者订阅
    observable.subscribe(observer);
}


//---------------------------------------1:快捷创建事件队列 Observable.just(T...)--------------------------------------------------------------

// create() 方法是 RxJava 最基本的创造事件序列的方法。基于这个方法, RxJava 还提供了一些方法用来快捷创建事件队列,
// 例如just(T...): 将传入的参数依次发送出来.

//简化:观察者的创建,RxJava快捷创建事件队列的方法:just(T...):

/**
 * 简化:观察者的创建
 * {@link #method0()}
 */
private void method1() {


    //实现步骤
    //1:被观察者:
    //2:观察者:
    //3:订阅-被观察者被观察者订阅


    //1:被观察者:
    //just(T...): 将传入的参数依次发送出来
    Observable<String> observable = Observable.just("Hello", "World", "!");
    // 将会依次调用:
    // onNext("Hello");
    // onNext("World");
    // onNext("!");
    // onCompleted();


    //2:观察者:
    Observer<String> observer = new Observer<String>() {
        @Override
        public void onCompleted() {
            Logger.d("观察者-observer:onCompleted()");
        }

        @Override
        public void onError(Throwable e) {
            Logger.d("观察者-observer:onError()");
        }

        @Override
        public void onNext(String s) {
            Logger.d("观察者-observer:onNext():" + s);
            // getException();//故意让程序出现异常,用于测试onError()方法的执行....
        }
    };

    //3:订阅:被观察者被观察者订阅
    observable.subscribe(observer);
}


//---------------------------------------2:快捷创建事件队列 Observable.from(T[]) / from(Iterable<? extends T>--------------------------------------------------------------

/**
 * 简化:观察者的创建: RxJava快捷创建事件队列的方法:just(String[] array) 将传入的数组或 Iterable 拆分成具体对象后,依次发送出来
 * {@link #method1()}
 */
private void method2() {

    //实现步骤
    //1:被观察者
    //2:观察者
    //3:订阅-被观察者被观察者订阅


    String[] array = new String[]{"Hello", "World", "!"};
    //1:被观察者:
    //just(String[] array) 将传入的数组或 Iterable 拆分成具体对象后,依次发送出来。
    Observable observable = Observable.from(array);
    // 将会依次调用:
    // onNext("Hello");
    // onNext("World");
    // onNext("!");
    // onCompleted();


    //2:观察者
    Observer observer = new Observer() {
        @Override
        public void onCompleted() {
            Logger.d("观察者-observer:onCompleted()");
        }

        @Override
        public void onError(Throwable e) {
            Logger.d("观察者-observer:onError()");
        }

        @Override
        public void onNext(Object o) {
            String str = (String) o;
            Logger.d("观察者-observer:onNext():" + str);
           // getException();//故意让程序出现异常,用于测试onError()方法的执行....
        }
    };

    //3:订阅: 被观察者被观察者订阅
    observable.subscribe(observer);

}

//---------------------------------------3: subscribe()支持不完整定义的回调--------------------------------------------------------------

/**
 * 对观察者的简化
 * {@link #method2()}
 * subscribe一个参数的不完整定义的回调
 * subscribe(final Action1<? super T> onNext)
 */
private void method3() {

    String[] array = new String[]{"Hello", "World", "!"};
    //1:被观察者
    Observable observable = Observable.from(array);

    //2:观察者
    Action1 onNextAction = new Action1() {
        @Override
        public void call(Object o) {
            String str = (String) o;
            Logger.d("观察者:call(Object o):" + str);
        }
    };

    //3:订阅-被观察者被观察者订阅
    //subscribe(final Action1<? super T> onNext)
    //自动创建 Subscriber ,并使用 onNextAction 来定义 onNext()
    observable.subscribe(onNextAction);
}

/**
 * 对观察者的简化
 * subscribe两个参数的不完整定义的回调
 * {@link #method3()}
 * subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError)
 */
private void method4() {

    //1:被观察者
    Observable observable = Observable.from(new String[]{"Hello", "World", "!"});

    //2:观察者
    Action1 onNextAction = new Action1() {
        @Override
        public void call(Object o) {
            String str = (String) o;
            Logger.d("观察者:onNextAction:call(Object o):o:" + str);
        }
    };


    Action1<Throwable> onErrorAction = new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            Logger.d("观察者:onErrorAction:call(Throwable throwable):" + throwable.getMessage());
        }
    };


    //3:订阅
    //subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError)
    // 自动创建 Subscriber ,并使用 onNextAction 和 onErrorAction 来定义 onNext() 和 onError()
    observable.subscribe(onNextAction, onErrorAction);


}

/**
 * subscribe三个参数的不完整定义的回调
 * subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError, final Action0 onComplete)
 */
private void method5() {
    //1:被观察者
    Observable observable = Observable.from(new String[]{"Hello", "World", "!"});


    //2:观察者
    Action1 onNextAction = new Action1() {
        @Override
        public void call(Object o) {
            String str = (String) o;
            Logger.d("观察者:onNextAction:call():s:" + str);
        }
    };


    Action1<Throwable> onErrorAction = new Action1<Throwable>() {
        @Override
        public void call(Throwable throwable) {
            Logger.d("观察者:onErrorAction:call(Throwable throwable):" + throwable.getMessage());
        }
    };


    Action0 onCompletedAction = new Action0() {
        @Override
        public void call() {
            Logger.d("观察者:onCompletedAction:call()");
        }
    };


    //3:订阅:被观察者被观察者订阅

    //subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError, final Action0 onComplete)
    // 自动创建 Subscriber ,并使用 onNextAction、 onErrorAction 和 onCompletedAction 来定义 onNext()、 onError() 和 onCompleted()
    observable.subscribe(onNextAction, onErrorAction, onCompletedAction);

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值