Skip to content

zouxianbincc/android-Rx

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

9 Commits
 
 
 
 

Repository files navigation

android-Rx

Android 中使用RxAndroid与Rxjava简单的例子

说明:

此Demo只是简单的例子,因本人也是在学习和探索的阶段,如有错误的地方可及时联系我[email protected]

create

range

just

from

interval

repeat

timer

现在只学习这几种操作符

###引入包:

因为RxAndroid是基于RxJava的。所以引用RxAndroid同时,也引用RxJava

dependencies {

compile fileTree(dir: 'libs', include: ['*.jar'])
compile 'io.reactivex:rxandroid:1.1.0'
compile 'io.reactivex:rxjava:1.1.3'

}

###在使用RxAndroid或RxJava时,最基本的是要理解一个概念。Subscriber(观察者)与Observable(被观察者)。

Subscriber,观察者(订阅者):订阅者,通俗理解,当一个人订阅了某一个东西,而这个订阅的人就是订阅者(观察者) Observable,被观察者 : “被”,被动词。谁被谁干嘛了,如,那个女孩,被你追求了。而女孩就是“被观察者”

#####Subscriber的onNext/onComplete/onError方法:

onNext就是发射处理好的数据给Subscriber;

onComplete用来告诉Subscriber所有的数据都已发射完毕;

onError是在发生错误的时候发射一个Throwable对象给Subscriber

###create 操作符:

Create 操作符。发送一个数据,这里发送String

public void Create() {

    //被观察者

    Observable observable = Observable.create(new Observable.OnSubscribe<String>() {
        @Override
        public void call(Subscriber<? super String> subscriber) {

            boolean randomNumber = new Random().nextBoolean();//随机产生一个boolean的值

            if (randomNumber && !subscriber.isUnsubscribed()) {//当为true时,与 订阅者没有取消订阅时,发送“成功”给订阅者。
                subscriber.onNext("成功");

                return;
            }


            subscriber.onError(new Throwable());//为false时。我们想它是错误的。


        }
    });

    //观察者(订阅者)
    Subscriber subscriber = new Subscriber() {
        @Override
        public void onCompleted() {
            mIRxView.onCompleted();



            Log.e("Create","onCompleted");
        }

        @Override
        public void onError(Throwable e) {
            mIRxView.onError("产生false,调用onError方法");



            Log.e("Create","产生false,调用onError方法");
        }

        @Override
        public void onNext(Object object) {
            mIRxView.onNext("产生false,调用onNext方法" + object);



            Log.e("Create","产生true,调用onNext方法" + object);
        }
    };


    observable.subscribe(subscriber);//这个,才是真正把观察者与被观察者创建联系。


}

###Range操作符:

Range(n,m),Range操作符根据出入的初始值n和数目m发射一系列大于等于n的m个值

public void Range() {

    //n=100,m=5;这里的效果时。会发送100,101,102,103,104这几个数字。从100开始。不断加1发送五次
    Observable observable = Observable.range(100, 5);

    Subscriber subscriber = new Subscriber() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Object object) {



            Log.e("Range","renge=" + object);


            mIRxView.range(object);

        }
    };

    observable.subscribe(subscriber);


}

###just 操作符:

just方法。这里做的是传一个long类型的值。这个值随机生成。
实验。同一个被观察者observable 被不同的订阅者订阅时,会不会生成不同的long 的值。
很显然,值是相同的。并不会因观察者改变而改变
jsut与defer的不同之处。defer当有Subscriber订阅时,都会新创建一个Observable对象
Defer操作符只有当有Subscriber来订阅的时候才会创建一个新的Observable对象,也就是说每次订阅都会得到一个刚创建的最新的Observable对象,这可以确保Observable对象里的数据是最新的

 public void just() {

    final Observable<Long> observable = Observable.just(System.currentTimeMillis());

    observable.subscribe(new Subscriber<Long>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Long aLong) {

            mIRxView.just1(aLong);

            Log.e("just","just1=" + aLong);

        }
    });


    observable.subscribe(new Subscriber<Long>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Long aLong) {
            mIRxView.just2(aLong);
            Log.e("just","just2=" + aLong);
        }
    });
    observable.subscribe(new Subscriber<Long>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Long aLong) {
            mIRxView.just3(aLong);
            Log.e("just","just3=" + aLong);
        }
    });


}

###From 操作符:

From操作符用来将某个对象转化为Observable对象,并且依次将其内容发射出去。
这个类似于just,但是just会将这个对象整个发射出去。
比如说一个含有10个数字的数组,使用from就会发射10次,每次发射一个数字,而使用just会发射一次来将整个的数组发射出去

public void From() {

    Integer[] umber = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 11, 13, 14, 15};

    Observable observable = Observable.from(umber);

    observable.subscribe(new Subscriber() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Object object) {
            Log.e("From","from=" + object);
        }
    });


}

###Interval 操作符:

Interval所创建的Observable对象会从0开始,每隔固定的时间发射一个数字。
需要注意的是这个对象是运行在computation Scheduler,所以如果需要在view中显示结果,要在主线程中订阅。

public void Interval(){

    Observable<Long> observable=Observable.interval(2, TimeUnit.SECONDS);

    //interva operates by default on the computation Scheduler,so observe on main Thread
    observable.observeOn(AndroidSchedulers.mainThread());

    observable.subscribe(new Subscriber<Long>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Long aLong) {
            Log.e("Interval","Interval=" + aLong);
        }
    });

}

###Repeat 操作符:

Repeat会将一个Observable对象重复发射,我们可以指定其发射的次数 下面是发送一个字符S,发送5次

public void Repeat(){

    Observable<String> observable=Observable.just("S").repeat(5);

    observable.subscribe(new Subscriber<String>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(String s) {
            Log.e("Repeat","Repeat=" + s);
        }
    });



}

###Timer操作符:

Timer会在指定时间后发射一个数字0,注意其也是运行在computation Scheduler

 public void Timer(){


    Observable<Long> observable=Observable.timer(2,TimeUnit.SECONDS);
    //timer by default operates on the computation Scheduler
    observable.observeOn(AndroidSchedulers.mainThread());
    observable.subscribe(new Subscriber<Long>() {
        @Override
        public void onCompleted() {

        }

        @Override
        public void onError(Throwable e) {

        }

        @Override
        public void onNext(Long aLong) {
            Log.e("Timer","Timer=" + aLong);
        }
    });

}

##不断学习中。后续持续更新

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages