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);            }        });    }}