前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >RxAndroid从零开始学之二(Observable的其它创建与订阅形式)

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

作者头像
Frank909
发布2019-01-14 17:21:56
1.7K0
发布2019-01-14 17:21:56
举报
文章被收录于专栏:Frank909Frank909

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

Observable的创建的另外方式

我们知道。

代码语言:javascript
复制
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对象,如下:

代码语言:javascript
复制
Observable<String> testJust = Observable.just("Hello","How are you?","yes,i\'m fine,thank you!");

它的效果等同于

代码语言:javascript
复制
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

代码语言:javascript
复制
Observable<String> testFrom = Observable.from(new String[]{"Hello","How are you?","yes,i\'m fine,thank you!"});

又如:

代码语言:javascript
复制
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()关系

写看看源码。

代码语言:javascript
复制
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时,可以通过

代码语言:javascript
复制
mObservable.subscribe(mTestSubscriber);

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

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

Action

先看api

代码语言:javascript
复制
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的源码。

代码语言:javascript
复制
/**
 * 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

代码语言:javascript
复制
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订阅。

代码语言:javascript
复制
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,一步一步来,后面有更多的知识点。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016年09月05日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Observable的创建的另外方式
    • just(T t…)
    • from
      • just()和from()关系
      • Subscribe()其它形式
        • Action
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档