一直要写,一直再拖,感觉到事态严重性,还是身先动,边写边整理吧!
如果这都觉得懵逼!还是调头看看之前的系列:
公众号:君不见And
RxJava2.0教程(一)
http://mp.weixin.qq.com/s/Nr9kxDR2hRWvfqHUdDF-XA
RxJava2.0教程(二)
https://mp.weixin.qq.com/s/S-sSWOcd408BtIC7Z7yN8g
RxJava2.0教程(三)
http://mp.weixin.qq.com/s/5QjSX0OOtWBhjx5oR9DnBg
RxJava2.0教程(四)
https://mp.weixin.qq.com/s/o1TvpqKy1OttGJ_HNfkrhw
RxJava2.0教程(五)
http://mp.weixin.qq.com/s/_6GvCJ5rTxZOoRjaqei7aw
RxJava2.0教程(六)
https://mp.weixin.qq.com/s/x9j8twk3-MsUA08S55FXWw
RxJava2.0教程(七)
https://mp.weixin.qq.com/s/4F0hJlu1C8CeBuw-CRRN1w
RxJava2.0教程(八)
http://mp.weixin.qq.com/s/aW2Gxtk00zslNOtjSUQHlw
RxJava2.0教程(九)
http://mp.weixin.qq.com/s/0-oUJGkTzs4FKf9UFDPrlA
RxJava2.0教程(十)
http://mp.weixin.qq.com/s/aWA8_3_aQN_fqDoAUQFaaw
喝了这碗兰姆酒!
前言
这篇继承前面公众号推送的系列文章来写,这些文章都深入浅出,比较好理解,然后真正动手的时候还是止步不前,我们不允许这样的情况出现。接下来,我们就开始,通过本人在项目中使用Rxjava的例子来讲解。
这是我们之前的系列文章,欢迎讨论学习。
调度器类型讲解
Schedulers.computation( )
用于计算任务,如事件循环或和回调处理,不要用于 IO 操作(IO操作请使用 Schedulers.io());默认线程数等于处理器的数量
Schedulers.from(executor)
使用指定的 Executor 作为调度器
Schedulers.immediate( )
在当前线程立即开始执行任务
Schedulers.io( )
用于 IO 密集型任务,如异步阻塞 IO 操作,这个调度器的线程池会根据需要增长;
Schedulers.io( ) 默认是一个 CachedThreadScheduler,很像一个有线程缓存的新线程调度器
Schedulers.newThread( )
为每个任务创建一个新线程
Schedulers.trampoline( )
当其它排队的任务完成后,在当前线程排队开始执行
AndroidSchedulers.mainThread()
此调度器为 RxAndroid 特有,顾名思义,运行在 Android UI 线程上
操作符
Just
将一个或多个对象转换成发射这个或这些对象的一个Observable。
Map:
常用操作符之一,对序列的每一项都应用一个函数来变换 Observable 发射的数据序列。将对象转换成另一个对象发射出去,应用范围非常广,如数据的转换,数据的预处理等。
FlatMap :
将 Observable 发射的数据集合变换为 Observables 集合,然后将这些 Observable 发射的数据平坦化的放进一个单独的 Observable。
Buffer
它定期从 Observable 收集数据到一个集合,然后把这些数据集合打包发射,而不是一次发射一个。相当于缓存效果。
Zip
使用一个函数组合多个 Observable 发射的数据集合,然后再发射这个结果。
Filter
用于过滤上游发送的数据。条件判断。
在此先写这么几个常用的吧。这种操作符还是很多的。如果不清楚的可以看我公众号之前的文章,这里就不长篇累牍了。
重点
- 首先看我们要实现的功能,如下:

1.三个按钮,来供用户选择是当天,当周还是当月的数据;
2.根据这个参数来区别每项数据的具体时间范围;
3.这里通过一个例子来验证 Flatmap 的使用;
- 介绍过整体之后,你是否有个思路呢?可以试想下,如果是你,怎么使用 Rxjava 来实现这个需求,然后再来看看我们的项目实现:
- 首先要获取数据
- 其次是数据根据时间来排序;
- 再就是三个不同的模块里面的不同数据划分;
- Flatmap 的例子使用注册之后的数据转换成登陆的数据;
我们先来看代码块:



我们看到尾部的代码 subscribe 订阅中有一个转换,我们只是排序,我们在此还需要做一个处理,就是我们之前看到的,还需要根据时间把数据归类到天,周,月的范围内。我们再用 map 来转换下:


基本到这里,已经实现了了我们之前提的需求,为了切合我们实际展示,我们记得把时间的参数稍微修改到当前某月或者某天,只是为了更直接的看到效果
以上就是 Map 转换,加上在实际项目中的使用,接着我们在试着用 Flatmap 来操作另一个功能;
- 点击最上图 2 部位的按钮,我们来实现注册之后登陆的实际操作;



最后
最后要说说,代码基本上已经都贴出来了,所以也就不再上传 github 了。当然代码只是实际项目中摘出的一个小部分,有瑕疵,欢迎大家指点,讨论。可以关注微信公众号:

网友评论