RxAndroid从零开始学之二(Observable的其它创建与订阅形式)

来源:互联网 发布:linux awk命令详解 编辑:程序博客网 时间:2024/06/11 05:46

前一篇文章简单地写了Observable、Observer、Subcriber及subcribe()方法的使用。这篇再往下学习一些基础的知识点。内容也不会长。

Observable的创建的另外方式

我们知道。

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

create()方法创建一个Observable()对象,而RxJava中还有just()和from()方法可以直到同样的作用。

just(T t…)

just()的作用也是创建Observable对象,如下:

Observable<String> testJust = Observable.just("Hello","How are you?","yes,i\'m fine,thank you!");

它的效果等同于

final Observable<String> mObservable = Observable.create(new Observable.OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("Hello");                subscriber.onNext("How are you?");                subscriber.onNext("Yes,i\'m fine,thank you!");                subscriber.onCompleted();            }        });

注意的是,查看源码中,just()中参数的个数最长到10个

from

Observable<String> testFrom = Observable.from(new String[]{"Hello","How are you?","yes,i\'m fine,thank you!"});

又如:

List<String> lists = new ArrayList<>();lists.add("Hello");lists.add("How are you?");lists.add("yes,i'm fine,thank you!");Observable<String> testFrom1 = Observable.from(lists);

from()支持从数组或者是实现了Iterator接口的集合中接收参数,效果等同于上面的just()例子和create()方法。

just()和from()关系

写看看源码。

public final static <T> Observable<T> just(T t1, T t2) {        return from(Arrays.asList(t1, t2));    }

当just参数在2个以上时,实际上内部调用的也是from(T[] array)方法。

好了,接下面的一part

Subscribe()其它形式

上一篇已经简单进行了演示,当创建好一个Observable和一个Subcriber时,可以通过

mObservable.subscribe(mTestSubscriber);

绑定两者,而subscribe()方法调用时,绑定在Observable对象mObservable中的OnSubscriber对象的onCall()方法就会处理,在onCall()方法中,mTestSubscriber可以调用onNext()或者onError()或者onCompleted()来完成整个事件链条。

但RxJava还提供其他的形式。比如Action

Action

先看api

public final Subscription subscribe(final Action1<? super T> onNext);public final Subscription subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError);public final Subscription subscribe(final Action1<? super T> onNext, final Action1<Throwable> onError, final Action0 onComplete);

subscribe()可以传入Action1或者Action0的参数。
先看Action1和Action0的源码。

/** * A one-argument action. */public interface Action1<T> extends Action {    void call(T t);}/** * A zero-argument action. */public interface Action0 extends Action {    void call();}

注释写得很清楚,Action1代表一个参数action,Action0代表0个参数的Action.

那好,这里查看public final Subscription subscribe(final Action1

public final Subscription subscribe(final Action1<? super T> onNext) {        if (onNext == null) {            throw new IllegalArgumentException("onNext can not be null");        }        return subscribe(new Subscriber<T>() {            @Override            public final void onCompleted() {                // do nothing            }            @Override            public final void onError(Throwable e) {                throw new OnErrorNotImplementedException(e);            }            @Override            public final void onNext(T args) {                onNext.call(args);            }        });    }

显而易见,这个方法中内部创建了一个subscriber对象,当onNext触发时,调用传入的Action1的对象的onCall方法。

其它的两个方法,也是如此,这里不再做分析。

总之,如果只关心onNext()事件,或者需要将onNext(),onError()或者onCompleted()由不同的对象处理,就可以考虑用Action的方式实现subscribe订阅。

Action1<String> testAction = new Action1<String>() {            @Override            public void call(String s) {                Toast.makeText(MainActivity.this,s,Toast.LENGTH_SHORT).show();            }        };        mObservable.subscribe(testAction);

这相当于创建一个Subscriber对象,然后调用onNext()方法。

好了,这篇文章内容就到这里。

回顾下:我们学习了基本的Observable和Subscriber的创建,订阅。
也学会了它们其它形式如Just(),from(),Action()方式的实现。
虽然例子看起来没有什么用,但是这只是demo,一步一步来,后面有更多的知识点。

1 0
原创粉丝点击