美文网首页Android开发知识集Android知识Android开发
Rxjava 从学习到实战过渡(日期选择获取数据)

Rxjava 从学习到实战过渡(日期选择获取数据)

作者: 549f95307939 | 来源:发表于2017-04-26 16:02 被阅读126次

一直要写,一直再拖,感觉到事态严重性,还是身先动,边写边整理吧!

如果这都觉得懵逼!还是调头看看之前的系列:
公众号:君不见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 的例子使用注册之后的数据转换成登陆的数据;

我们先来看代码块:


图一 模拟数据添加,判断主要用到第二个时间参数 绑定数据的第一重转换,这里关键的 just 使用,map 的转换数据,其次是根据第二个参数来给数据升序处理

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

连接下图
这样就做了三个不同模块的数据分类,具体方法,仔细研究代码,这里着重看Rxjava的使用

基本到这里,已经实现了了我们之前提的需求,为了切合我们实际展示,我们记得把时间的参数稍微修改到当前某月或者某天,只是为了更直接的看到效果

以上就是 Map 转换,加上在实际项目中的使用,接着我们在试着用 Flatmap 来操作另一个功能;

  • 点击最上图 2 部位的按钮,我们来实现注册之后登陆的实际操作;
用 Retrofit 来进行操作 Retrofit 要配置,这不是我们要讲的内容,请自行谷歌之 重点看这几行代码,将注册返回来的结果,使用 Flatmap 转换成另一个 Observable 类型的,注意和 Map 的区别,Map 只是转换发射的数据类型,而 FlatMap 可以将原始 Observable 转换成另一个 Observable

最后

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

君不见And

相关文章

网友评论

    本文标题:Rxjava 从学习到实战过渡(日期选择获取数据)

    本文链接:https://www.haomeiwen.com/subject/rmnizttx.html