RxJava简单入门
来源:互联网 发布:电脑淘宝怎么看信用 编辑:程序博客网 时间:2024/05/26 02:21
RxJava简单介绍
前言
- RxJava其实是一种观察者模式,而观察者模式,就必定存在事件源、事件的观察者。而观察者跟事件源也存在着一种订阅的关系,只有事件源被观察者所订阅,观察者才能接收到事件源发生的变化,观察者不用时刻的关注事件源,只有事件源发生改变,观察者便能收到通知。
基本概念
- 现在说说RxJava所主要涉及到的对象
1. Observable : 发射源,在观察者模式中担当着“被观察这”和“可观察对象”;
2. Observer : 观察者,可接收发射源所发射的数据;
3. Subject : 即可充当发射源,也可充当接受源。为了避免混淆,本文对subject不做详细讲解,将在以后的详细讲解中介绍;
4. Subscriber : 订阅者,也是接收源,subscriber是继承自observer,可对已订阅的事件取消订阅。observer在subscribe()过程中最终也会转换成subscriber对象;
5. Subscription : observer调用subscribe()方法返回的对象,同样具有unsubscribe()方法,用来取消订阅;
6. Action0 : RxJava的一个接口,只有一个无参的call()方法,无返回值,类似的也有Action1、Action2…Action9,call()的参数也依次是1到9个;
7. Func0 : 与Action0相似,有call()方法,但是有返回值的,同样也有Func1、Func2…Func9。
基本用法
- observable的创建
最基本的创建方式,create()
Observable.create(new Observable.OnSubscribe<String>() { @Override public void call(Subscriber<? super String> subscriber) { // 发射一个hello的字符串 subscriber.onNext("hello"); }});
使用just()方法,会创出observable对象,并自动调用onNext()方法
Observable.just(6).subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { // integer就是just()方法传入的参数6 }});
使用from(),会遍历集合或数组,发送每一个item
Observable.from(new String[]{ "hello", "android" }).subscribe(new Action1<String>() { @Override public void call(String s) { // 会依次的拿到"hello"、"android" }});
- observer的创建
只能通过一般的new来创建
Observer<String> observer = new Observer<String>() { @Override public void onCompleted() { // 数据接收完成 } @Override public void onError(Throwable e) { // 数据接收出错 } @Override public void onNext(String s) { }};
有了observable跟observer对象,就可以订阅事件,想怎么玩都行了。上面通过just()跟from()创建的observable对象,是通过new Action1来订阅的,下面将通过另外一种方式,就是observable直接订阅observer对象。
Observable.just("hello").subscribe(observer);
在上面的onNext()中就可以拿到”hello”字符串,然后就可以做一系列处理,是不是很简单明了。当然,如果不需要关心数据是否接收完成跟是否会出错,可以直接用上面的new Action1作为参数传入subscribe(),在call()中做处理。
以上就是RxJava最简单的用法,虽然代码并没有比一般写法要少,但代码结构很整洁,逻辑也十分清晰,或者到了代码逻辑变了很多时,才能更好地体现RxJava的优雅。
现在有这样一个需求,有一个字符串,使用逗号间隔开的一串数字,要把大于0的取出来,然后再把拿到的数的两倍在打印出来。下面就直接上RxJava代码:
Observable.just("2, 4, 0, -3, 5, 7, -6, -2, 9, -10") .flatMap(new Func1<String, Observable<String>>() { @Override public Observable<String> call(String s) { // 返回每个item的一个observable对象 return Observable.from(s.split(",")); }}) .filter(new Func1<String, Boolean>() { @Override public Boolean call(String s) { // 过滤掉不大于0的数 return Integer.valueOf(s) > 0; }}) .map(new Func1<String, Integer>() { @Override public Integer call(String s) { // 对拿到的每一个数进行处理 Integer integer = Integer.valueOf(s); integer *= 2; return integer; }}) .subscribe(new Action1<Integer>() { @Override public void call(Integer integer) { // 得到最后结果 Log.d("result", String.valueOf(integer)); }});
容易看出,思路是非常的清晰,而且还是一个链式编程,在逻辑变得愈加的复杂,代码还能保持简洁,可读性强。
总结
看了RxJava简单的介绍与及一些例子的应用,想必入门并没有原来想的那么难,如果上面的例子都理解了,我相信你已经跨进了RxJava的大门,剩下的就是继续学习实际的应用场景,还有各种强大的操作符,结合实际的例子进行学习,便能完完全全的掌握其中的奥妙。
另外,本人是初次写博客,有什么知识不全面的,请大家多包涵,如有什么好的建议,欢迎留言,可以一起探讨学习、交流!
- RxJava的简单入门
- RxJava简单入门
- RxJava简单入门
- RxJava的简单使用入门
- RxJava-入门就是那么简单
- RxJava从入门到放弃1.0--rxjava的简单使用
- 简单入门使用Retrofit+ rxjava 下载图片
- rxjava入门,从最简单的上手
- RxJava入门
- RxJava 入门
- RxJava 入门
- RxJava 入门
- RXJava入门
- RxJava 入门
- RxJava入门
- Rxjava入门
- RxJava 入门
- RxJava 入门
- Android自定义全键盘
- Oracle 常用性能监控SQL语句
- Adnroid 三种动画的实现
- 驱动之制作s3c_led.ko
- HDOJ 1236 排名
- RxJava简单入门
- C++<algorithm>中sort的比较函数写法
- android visibility 详解
- 单例模式(Singleton)及其C++实现
- 35 个 Java 代码性能优化总结
- c++常用应用函数的使用备份
- 在httpd.conf中设置%{REQUEST_FILENAME} !-f无效解决方法
- 设计模式之工厂模式(Factory)
- Activity左边滑出,右边滑入的动画切换