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

前一篇文章简单地写了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,一步一步来,后面有更多的知识点。

你可能感兴趣的:(android,rxjava,rxandroid,Action1)