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

            }
        });

    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值