RxJava零基础入门(一)

@Override

//注意此处的call方法没有Subscriber参数

public Observable call() {

  return Observable.just("deferObservable");

}});




5.使用interval( ),创建一个按固定时间间隔发射整数序列的Observable,可用作定时器:



intervalObservable = Observable.interval(1, TimeUnit.SECONDS);//每隔一秒发送一次




6.使用range( ),创建一个发射特定整数序列的Observable,第一个参数为起始值,第二个为发送的个数,如果为0则不发送,负数则抛异常:



rangeObservable = Observable.range(10, 5);//将发送整数10,11,12,13,14




7.使用timer( ),创建一个Observable,它在一个给定的延迟后发射一个特殊的值,等同于Android中Handler的postDelay( )方法:



timeObservable = Observable.timer(3, TimeUnit.SECONDS); //3秒后发射一个值




8.使用repeat( ),创建一个重复发射特定数据的Observable:



repeatObservable = Observable.just(“repeatObservable”).repeat(3);//重复发射3次




**Observer的创建**



mObserver = new Observer() {

@Override

public void onCompleted() {

  LogUtil.log("onCompleted");

}

@Override

public void onError(Throwable e) {

}

@Override

public void onNext(String s) {

  LogUtil.log(s);

}};




ok,有了Observable和Obsever,我们就可以随便玩了,任取一个已创建的Observable和Observer关联上,即形成一个RxJava的例子,如:



justObservable.subscribe(mObserver);




mObserver的onNext方法将会依次收到来自justObservable的数据”just1”、”just2”,另外,如果你不在意数据是否接收完或者是否出现错误,即不需要Observer的onCompleted()和onError()方法,可使用Action1,subscribe()支持将Action1作为参数传入,RxJava将会调用它的call方法来接收数据,代码如下:



justObservable.subscribe(new Action1() {

@Override

public void call(String s) {



      LogUtil.log(s);

 }});



以上就是RxJava最简单的用法。看到这里,我也不知道我写的是否简单明了,也许你会想,“哎呀,写个异步的东西,怎么这么麻烦,为什么不用Thread+Handler呢”,那你就错了,RxJava也以代码的简洁深受广大用户喜爱,简洁不能理解为代码量少,而是随着逻辑的复杂,需求的更改,代码可依然能保持极强的阅读性,举个简单的例子(前方高能预警~~~),领导要我从数据库的用户表查找出所有用户数据,我二话不说拿出心仪的RxJava就写:



Observable.create(new Observable.OnSubscribe<List>() {

      @Override

      public void call(Subscriber<? super List<User>> subscriber) {

          List<User> userList = null;

          ···

          //从数据库获取用户表数据并赋给userList

          ···

          subscriber.onNext(userList);

      }

  }).subscribe(new Action1<List<User>>() {

      @Override

      public void call(List<User> users) {



          //获取到用户信息列表

      }

  });



但是,领导突然又不想要所有用户了,只要名字叫“小明”的用户,行吧,领导最大,我改(假设名字唯一):



Observable.create(new Observable.OnSubscribe<List>() {

      @Override

      public void call(Subscriber<? super List<User>> subscriber) {

          List<User> userList = null;

          ···

          //从数据库获取用户表数据并赋给userList

          ···

          subscriber.onNext(userList);

      }

  }).flatMap(new Func1<List<User>, Observable<User>>() {

      @Override

      public Observable<User> call(List<User> users) {

          return Observable.from(users);

      }

  }).filter(new Func1<User, Boolean>() {

      @Override

      public Boolean call(User user) {

          return user.getName().equals("小明");

      }

  }).subscribe(new Action1<User>() {

      @Override

      public void call(User user) {

          //拿到谜之小明的数据

      }

  });



搞定,这时候领导又说,我不要小明了,我要小明的爸爸的数据,(坑爹啊~~),我继续改:



Observable.create(new Observable.OnSubscribe<List>() {

      @Override

      public void call(Subscriber<? super List<User>> subscriber) {

          List<User> userList = null;

          ···

          //从数据库获取用户表数据并赋给userList

          ···

          subscriber.onNext(userList);

      } 

 }).flatMap(new Func1<List<User>, Observable<User>>() {

      @Override

      public Observable<User> call(List<User> users) {

          return Observable.from(users);

      }

  }).filter(new Func1<User, Boolean>() {

      @Override

      public Boolean call(User user) {

          return user.getName().equals("小明");

      }

  }).map(new Func1<User, User>() {

      @Override

      public User call(User user) { 

          //根据小明的数据user从数据库查找出小明的父亲user2

          return user2;

      }

  }).subscribe(new Action1<User>() {

      @Override

      public void call(User user2) {

        //拿到谜之小明的爸爸的数据

      }

  });



搞定,“还想怎么改?领导请说···”。  

以上例子,涉及到几个操作符,初学者可能无法理解,但是无所谓,这不是重点,我的目的只是为了向你展示RxJava在需求不断变更、逻辑愈加复杂的情况下,依旧可以保持代码简洁、可阅读性强的一面,没有各种回调,也没有谜之缩进!  



#### **总结**



看了以上所讲,如果你已经爱上了RxJava,如果你已经全部理解,我确信,你已经跨入RxJava的大门,剩下的只是时间的问题以及如何在实际开发场景中去应用的问题,那么下篇文章,我将继续讲解RxJava中各种强大的操作符,并尽量以实际开发过程中遇到的问题作为例子,提升自己的同时,帮助初学者迅速上手RxJava,如有写的不好的地方,还请见谅,真心欢迎各路大神指点,探讨相关技术。  

  

[RxJava 1.x.x 详细介绍的中文文档]( )



#### **注(添加于2017-08)**



  

这里给出两篇基于RxJava2.x的好文章地址,感兴趣的可以去看看,也不错。  

1、[这可能是最好的RxJava 2.x 教程(完结版)]( )  

2、[这可能是最好的RxJava 2.x 入门教程(一)]( )  

3、[给初学者的RxJava2.0教程(一)]( )写的比较好,也是通俗易懂的



 


## 总结

算法知识点繁多,企业考察的题目千变万化,面对越来越近的“金九银十”,我给大家准备好了一套比较完善的学习方法,希望能帮助大家在有限的时间里尽可能系统快速的恶补算法,通过高效的学习来提高大家面试中算法模块的通过率。

这一套学习资料既有文字档也有视频,里面不仅仅有关键知识点的整理,还有案例的算法相关部分的讲解,可以帮助大家更好更全面的进行学习,二者搭配起来学习效果会更好。


**部分资料展示:**

![](https://img-blog.csdnimg.cn/img_convert/a4f5ebc1c27af788c71ec6c02cfa07ec.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/5dd41f1ec45fa8c7585bb676ede34594.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/0353bcb5bc498f07c3c36512fa5e739f.webp?x-oss-process=image/format,png)
![](https://img-blog.csdnimg.cn/img_convert/a18f28660c374a75c695c65e332f6b94.webp?x-oss-process=image/format,png)

**有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。**




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

H-1714516186528)]
[外链图片转存中...(img-NPbIPr07-1714516186529)]

**有了这套学习资料,坚持刷题一周,你就会发现自己的算法知识体系有明显的完善,离大厂Offer的距离更加近。**




**网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。**

**[需要这份系统化学习资料的朋友,可以戳这里获取](https://bbs.csdn.net/topics/618156601)**

**一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!**

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值