Rxjava简单操作字符学习

来源:互联网 发布:怎么虚拟mac地址 编辑:程序博客网 时间:2024/06/10 08:46

本人也是刚开始研究,若有错误的地方希望大家提出来,大家一起探讨.

若大家对Button的原理比较清楚,对理解Rxjava会有一定的帮助.
这里写图片描述

Rxjava
这里写图片描述

RxJava 有四个基本概念:Observable (可观察者,即被观察者)、 Observer (观察者)、 subscribe (订阅)、事件。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。

与传统观察者模式不同, RxJava 的事件回调方法除了普通事件 onNext() (相当于 onClick() / onEvent())之外,还定义了两个特殊的事件:onCompleted() 和 onError()。

onCompleted(): 事件队列完结。RxJava 不仅把每个事件单独处理,还会把它们看做一个队列。RxJava 规定,当不会再有新的 onNext() 发出时,需要触发 onCompleted() 方法作为标志。
onError(): 事件队列异常。在事件处理过程中出异常时,onError() 会被触发,同时队列自动终止,不允许再有事件发出。
在一个正确运行的事件序列中, onCompleted() 和 onError() 有且只有一个,并且是事件序列中的最后一个。需要注意的是,onCompleted() 和 onError() 二者也是互斥的,即在队列中调用了其中一个,就不应该再调用另一个。

例子:
1.打印一个字符串

//创建被观察者        Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("rxjava");                subscriber.onCompleted();            }        });        //创建观察者        Subscriber<String> subscriber=new Subscriber<String>() {            @Override            public void onCompleted() {                Log.d(TAG,"completed");            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(String s) {                Log.d(TAG,s);            }        };        //订阅        observable.subscribe(subscriber);

到这里就基本完成了rxjava的一套简单的流程.

2.几个字符串一起打印

Observable.just("hello", "rxjava").subscribe(new Subscriber<String>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(String s) {                Log.d(TAG, s);            }        });

可以换个方式

Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("hello world");                subscriber.onCompleted();            }        }).subscribe(new Action1<String>() {            @Override            public void call(String s) {                Log.d(TAG, s);            }        }, new Action1<Throwable>() {            @Override            public void call(Throwable throwable) {            }        }, new Action0() {            @Override            public void call() {                Log.d(TAG, "completed");            }        });

3.打印字符串数组

String[] str = {"hello", "world"};        Observable.from(str).subscribe(new Subscriber<String>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(String s) {                Log.d(TAG, s);            }        });

也可以换个方式

String[] name = {"a", "b", "c"};        Observable.from(name).subscribe(new Action1<String>() {            @Override            public void call(String s) {                Log.d(TAG, s);            }        });

4.设置背景图片

 Observable.create(new Observable.OnSubscribe<Drawable>() {            @Override            public void call(Subscriber<? super Drawable> subscriber) {                Drawable drawable = getDrawable(R.mipmap.ic_launcher);                subscriber.onNext(drawable);                subscriber.onCompleted();            }        }).subscribe(new Action1<Drawable>() {            @Override            public void call(Drawable drawable) {                mImageView.setBackground(drawable);            }        });

上面都是介绍rxjava的操作符,感觉就是鸡肋,我最喜欢的还是rxjava得线程切换,实在是完美.

Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                SystemClock.sleep(1000);                subscriber.onNext("yaohui");            }        }).subscribeOn(Schedulers.io())                .observeOn(AndroidSchedulers.mainThread())                .subscribe(new Subscriber<String>() {                    @Override                    public void onCompleted() {                    }                    @Override                    public void onError(Throwable e) {                    }                    @Override                    public void onNext(String s) {                        Toast.makeText(MainActivity.this, s, Toast.LENGTH_SHORT).show();                    }                });

这线程的切换真心的爽.由于本人的功力有限,介绍的不是很完全.算是记录下自己学习rxjava的过程吧.

1 0
原创粉丝点击