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,一步一步来,后面有更多的知识点。
- RxAndroid从零开始学之二(Observable的其它创建与订阅形式)
- RXSwift:Observable的创建和订阅
- RxAndroid从零开始学之五(常见操作符与三级缓存)
- RxAndroid从零开始学之三(线程调度)
- RxAndroid从零开始学之四(常见操作符)
- RxJava(二:Observable 创建,组合与过滤)
- [Wondgirl]从零开始学React Native之工程创建(二)
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- 从零开始学C++之继承(二):继承与构造函数、派生类到基类的转换
- RxJava与RxAndroid 被观察者的创建
- RXJava学习(二):Observable 和observel订阅流程的详细介绍
- 从零开始学C++之动态创建对象
- 从零开始学C++之动态创建对象
- rxJava的使用--Observable的创建及源码分析(二)
- 从零开始学单片机全过程之(二)
- Angular2 创建与使用Observable
- RX操作符之Observable的创建方式二(defer、range、interval、timer、Empty、Never、Throw)
- HQL数据查询基础
- 如何给网站添加【百度统计】
- 通向架构师的道路(第十天)之Axis2 Web Service(一)
- 高级控件———RecyclerView(一)*
- 搭建自己的github博客
- RxAndroid从零开始学之二(Observable的其它创建与订阅形式)
- myeclipse+mysql(Navicat)通过JDBC连接 详解+成功
- vs2012出现的几个常见的编译错误
- 递归实现数的全排列
- Cascade Adaboost样本更新
- BIOS/UEFI基础——写一个自己的shell命令
- 通向架构师的道路(第十一天)之Axis2 Web Service(二)
- Android开发-Volley-解析Json使用方法-2-完整Demo-AndroidStudio
- jetty 部署配置