rxjava 常用用法实例
来源:互联网 发布:卓行信贷网络借贷 编辑:程序博客网 时间:2024/06/07 13:13
具体怎么用我就不说了 你们都懂 我直接上传事例吧
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); } }); }}
阅读全文
1 0
- rxjava 常用用法实例
- Rxjava用法
- rxJava实例分析
- RxJava实例(一)
- RxJava实例(二)
- RxJava实例(三)
- RxJava实例-线程切换
- sql常用函数的用法实例
- boost常用库用法及其实例
- 帝国CMS常用函数用法及实例
- Rxjava基本用法
- Rxjava基本用法总结
- RxJava的基本用法
- RxJava基本用法
- Android rxjava用法浅析
- RxJava常用功能
- RxJava常用操作符
- 常用rxjava操作符
- Win10 修改git bash的默认开始路径
- phpstorm 调试总是断点在index.php的第一行
- memo
- PHP ajax实现数组返回
- Postgres小版本升级
- rxjava 常用用法实例
- gitlab之:gitlab 403 forbidden 并发引起ip被封
- Eclipse搭建SSH框架(下)包含增删查改-JAVA
- INIT_WORK的宏定义的解释
- Bootstrap3笔记2
- gulp匹配模式不起作用
- ansible tower 3.2.2 安装
- Rhyme/Hibernate JTA与thread上下文的区别
- leetcode5 最长回文子串