rxjava 常用用法实例
具体怎么用我就不说了 你们都懂 我直接上传事例吧
package com.demo.testRxjava; import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.view.View; import com.demo.LogUtils; import com.demo.R; import com.demo.bean.School; import java.io.Serializable; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; import rx.Observable; import rx.Observer; import rx.Subscriber; import rx.android.schedulers.AndroidSchedulers; import rx.functions.Action1; import rx.functions.Func1; import rx.schedulers.Schedulers; /** * Created by pangw on 2017/12/21. */ public class TestRxjava extends Activity {@Override protected void onCreate(@Nullable Bundle savedInstanceState) {super.onCreate(savedInstanceState); setContentView(R.layout.activity_rxjava); findViewById(R.id.btn).setOnClickListener(new View.OnClickListener() {@Override public void onClick(View view) {iniClick17(); }}); }/** * 过滤filter */ private void iniClick17() {Observable.just(1,2,3,4,5,6).filter(new Func1<Integer, Boolean>() {@Override public Boolean call(Integer integer) {return integer>3; }}).subscribe(new Action1<Integer>() {@Override public void call(Integer integer) {LogUtils.a(integer); }}); }/** * Distinct:去掉重复的项,比较好理解: */ private void iniClick16() {Observable.just("1","2",3,"3","2","5","6","4").distinct().subscribe(new Action1<Serializable>() {@Override public void call(Serializable serializable) {LogUtils.a(serializable); }}); }/** * Take:发射前n项数据,还是用上面的例子,假设不要改所有学校的名称了,就改前四个学校的名称: */ private void iniClick15() {List<School> list = new ArrayList<>(); for(int i=0;i<5;i++){School school = new School(); school.setName("name"+i); List<School.Student> students = new ArrayList<>(); for(int y=0;y<=i;y++){School.Student student = new School.Student(); student.setName("student name "+i+"-"+y); students.add(student); }school.setStudentList(students); list.add(school); }Observable.from(list).take(3).map(new Func1<School, School>() {@Override public School call(School school) {school.setName("嘻哈哈大学"); return school; }}).subscribe(new Action1<School>() {@Override public void call(School school) {}}); Observable.from(list).subscribe(new Action1<School>() {@Override public void call(School school) {LogUtils.a(school.getName()); }}); }/** * map 和 buffer 结合使用 */ private void iniClick14() {List<School> list = new ArrayList<>(); for(int i=0;i<5;i++){School school = new School(); school.setName("name"+i); List<School.Student> students = new ArrayList<>(); for(int y=0;y<=i;y++){School.Student student = new School.Student(); student.setName("student name "+i+"-"+y); students.add(student); }school.setStudentList(students); list.add(school); }Observable.from(list).map(new Func1<School, School>() {@Override public School call(School school) {school.setName("nb大学"); return school; }}).buffer(list.size()).subscribe(new Action1<List<School>>() {@Override public void call(List<School> schools) {}}); }/** * Buffer:缓存,可以设置缓存大小,缓存满后,以list的方式将数据发送出去;例: */ private void iniClick13() {Observable.just(1,2,3,4,5).buffer(2).subscribe(new Action1<List<Integer>>() {@Override public void call(List<Integer> integers) {LogUtils.a(integers.size()); }}); }/** * flagmap * 若打印全国的学生的名字 * 总之 flagmap 就是吧一个observer转化为另一个observer */ private void iniClick12() {List<School> list = new ArrayList<>(); for(int i=0;i<5;i++){School school = new School(); school.setName("name"+i); List<School.Student> students = new ArrayList<>(); for(int y=0;y<=i;y++){School.Student student = new School.Student(); student.setName("student name "+i+"-"+y); students.add(student); }school.setStudentList(students); list.add(school); }Observable.from(list).flatMap(new Func1<School, Observable<School.Student>>() {@Override public Observable<School.Student> call(School school) {return Observable.from(school.getStudentList()); }}).map(new Func1<School.Student, String>() {@Override public String call(School.Student student) {return student.getName(); }}).subscribe(new Action1<String>() {@Override public void call(String s) {LogUtils.a(s); }}); }/** * flagmap * 若打印全国的学校名称 */ private void iniClick11() {List<School> list = new ArrayList<>(); for(int i=0;i<5;i++){School school = new School(); school.setName("name"+i); List<School.Student> students = new ArrayList<>(); for(int y=0;y<=i;y++){School.Student student = new School.Student(); student.setName("student name "+i+"-"+y); students.add(student); }school.setStudentList(students); list.add(school); }Observable.from(list).map(new Func1<School, String>() {@Override public String call(School school) {return school.getName(); }}).subscribe(new Action1<String>() {@Override public void call(String s) {LogUtils.a(s); }}); }/** * map */ private void iniClick10() {Observable.just(1234).map(new Func1<Integer, String>() {@Override public String call(Integer integer) {//2000 return integer+1000+""; }}).subscribe(new Action1<String>() {@Override public void call(String s) {LogUtils.a(s); }}); }/** * 模拟后台 记载数据更新到前台进程 * 简单粗暴的解释一下,subscribeOn( )决定了发射数据在哪个调度器上执行, * observeOn(AndroidSchedulers.mainThread())则指定数据接收发生在UI线程,简直不要太方便。 */ private void iniClick9() {Observable.create(new Observable.OnSubscribe<String>() {@Override public void call(Subscriber<? super String> subscriber) {//数据库获取数据 String is = "this is main"; try {Thread.sleep(3000); } catch (InterruptedException e) {e.printStackTrace(); }//发射 subscriber.onNext(is); }}).subscribeOn(Schedulers.io()).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<String>() {@Override public void call(String s) {LogUtils.a(s); }}); }/** *mObserver的onNext方法将会依次收到来自justObservable的数据"just1"、"just2", * 另外,如果你不在意数据是否接收完或者是否出现错误,即不需要Observer的onCompleted()和onError()方法, * 可使用Action1,subscribe()支持将Action1作为参数传入,RxJava将会调用它的call方法来接收数据, */ private void iniClick8() {Observable.just("this action 01","this is action 02").subscribe(new Action1<String>() {@Override public void call(String s) {LogUtils.a(s); }}); }/** * 使用repeat( ),创建一个重复发射特定数据的Observable: * 下例是重复发送2次 * */ private void iniClick7() {Observable.just("wo shi repeat").repeat(2).subscribe(new Observer<String>() {@Override public void onCompleted() {LogUtils.a("onCompleted"); }@Override public void onError(Throwable e) {}@Override public void onNext(String s) {LogUtils.a("onNext:"+s); }}); }/** * 使用timer( ),创建一个Observable,它在一个给定的延迟后发射一个特殊的值,等同于Android中Handler的postDelay( )方法 */ private void iniClick6() {Observable.timer(3,TimeUnit.SECONDS).subscribe(new Observer<Long>() {@Override public void onCompleted() {LogUtils.a("onCompleted"); }@Override public void onError(Throwable e) {}@Override public void onNext(Long aLong) {LogUtils.a("onNext:"+aLong); }}); }/** * .使用range( ),创建一个发射特定整数序列的Observable,第一个参数为起始值,第二个为发送的个数,如果为0则不发送,负数则抛异常: */ private void iniClick5() {Observable.range(100,100).subscribe(new Observer<Integer>() {@Override public void onCompleted() {LogUtils.a("onCompleted"); }@Override public void onError(Throwable e) {}@Override public void onNext(Integer integer) {LogUtils.a("onNext:"+integer); }}); }/** *interval * 使用interval( ),创建一个按固定时间间隔发射整数序列的Observable,可用作定时器: */ private void iniClick4() {Observable.interval(1,TimeUnit.SECONDS).subscribe(new Observer<Long>() {@Override public void onCompleted() {LogUtils.a("onCompleted:"); }@Override public void onError(Throwable e) {}@Override public void onNext(Long aLong) {LogUtils.a("onNext:"+aLong); }}); }/** * from 发送的是集合的每个item * er just 是发送一个集合 */ private void iniClick3() {List<String> list = new ArrayList<>(); list.add("wo si 1"); list.add("wo si 2"); list.add("wo si 3"); Observable.from(list).subscribe(new Observer<String>() {@Override public void onCompleted() {LogUtils.a("onCompleted"); }@Override public void onError(Throwable e) {}@Override public void onNext(String s) {LogUtils.a("onNext"+s); }}); }/** * just 自动执行 next 方法 * 执行完毕好 自动执行onCompleted方法 */ private void iniClick2() {Observable.just("大家后才是真的好 广州好滴","我不好").subscribe(new Observer<String>() {@Override public void onCompleted() {LogUtils.a("onCompleted"); }@Override public void onError(Throwable e) {}@Override public void onNext(String s) {LogUtils.a("onNext" + s); }}); }/** * create * 最基本的 */ private void iniClick() {Observable.create(new Observable.OnSubscribe<String>() {@Override public void call(Subscriber<? super String> subscriber) {subscriber.onNext("大叫好才是真的好 广州好滴"); subscriber.onCompleted(); subscriber.onNext("大叫好才是真的好 广州好滴222"); }}).subscribe(new Observer<String>() {@Override public void onCompleted() {LogUtils.a("onCompleted"); }@Override public void onError(Throwable e) {}@Override public void onNext(String s) {LogUtils.a("onNext:" + s); }}); } }
rxjava 常用用法实例相关推荐
- php中 datalist,html5 datalist标签的用法是什么?这里有datalist标签的用法实例
本篇文章主要为大家讲述了关于html5 datalist标签的用法及html5 datalist标签的用法实例.本文说了两个常用的选项框的实例供大家选择观看,下面就让我们一起来看这篇文章吧 我们先来看 ...
- Go语言MD5加密用法实例
Go语言MD5加密用法实例 本文实例讲述了Go语言MD5加密用法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: import ( "crypto/md5" ...
- python mysqldb cursor_python中MySQLdb模块用法实例
转载自:http://www.jb51.net/article/57290.htm 姓名:梅金波 学号:16010110036 [嵌牛导读]MySQLdb ...
- input type=range标签用法实例代码
在HTML5中,又新增许多新<input>控件类型,比较实用的一个就是<input type="range">,以滑竿的方式来调整value值,在这以前需要 ...
- PHP中的常见魔术方法功能作用及用法实例
这篇文章主要介绍了PHP中的常见魔术方法功能作用及用法实例,本文讲解了构造函数和析构函数__construct()和__desctruct()以及属性重载(Property Overloading)_ ...
- traceroute命令的用法实例
ceroute命令的用法实例 traceroute 跟踪数据包到达网络主机所经过的路由工具: traceroute 是用来发出数据包的主机到目标主机之间所经过的网关的工具.traceroute 的原理 ...
- python中mysqldb模块_python中MySQLdb模块用法实例
本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接 ...
- System 类 和 Runtime 类的常用用法
System类的常用用法 1,主要获取系统的环境变量信息 public static void sysProp()throws Exception{Map<String,String> e ...
- linux 关联数组,Linux shell数组与关联数组的用法实例
Linux shell数组与关联数组的用法实例 1. 关联数组 使用 declare -A(declare 的用法请使用 help 进行查看,help declare) 进行声明关联数组变量: $ d ...
最新文章
- 《C程序猿从校园到职场》勘误
- VC++的应用程序框架中各类之间的访问方法
- 一套优雅的 Go 错误问题解决方案
- 互联网加大赛历届作品_匠心筑梦 ——家具漆服务系统2020年度涂装大赛成功举办...
- 让Mysql支持Emoji表情,解决[Err] 1366 - Incorrect string value: '\xF0\xA3\x84\x83'
- 使用viewPage实现图片轮播
- android 多数据图表,Android统计图表MPAndroidChart:为多条统计折线动态更新数据,以高温低温曲线为例【7】...
- rpm和yum的使用
- UUIDHexGenerator
- 小程序简介和开发工具
- 解决安装MATLAB2018a后出现License Manager Error -8的问题
- Python项目(Django):国内新冠肺炎疫情大数据可视化平台
- 苹果测试版最新发行说明,iOS 15.4支持戴口罩解锁,Dropbox和OneDrive的云存储功能被打破
- 高性能计算中的并行计算、分布式计算、网格计算和云计算之间的区别与联系
- 『IT视界』 [IT风云]MyEclipse 8.5 开发环境配置 插件安装(转载)
- 2022企业电子邮件在哪里找,企业电子邮件系统哪个安全?
- 面试题:在浏览器输入 URL 回车之后发生了什么?(超详细版)
- NVIDIA TX2 使能CAN模块
- echarts的中国地图,点击进入省级地图,按需加载对应的省js,可返回中国地图
- JDK8 下载与安装教程,超简单版(Windows)
热门文章
- 递归问题之老鼠出迷宫
- 数据分析/算法/建模/产品实习面经(字节跳动、爱奇艺、平安科技、石墨文档、欧克云链、水滴、茄子快传……)
- canvas绘制分享商品海报——已完成
- 无法正常启动程序0xc0000142是什么意思?无法正常启动程序0xc0000142该如何解决?
- 茅山后裔吧 (转载,有好多不错的道理)
- 无需端口映射,实现外部网络访问Docker集群内部服务
- 柴油闪点不合格的原因
- HJ20 密码验证合格程序 Java
- items中多个checkgroup在IE6下无法完整显示
- 全国356城所有银行网点数据(截至2022.2.13)