RxJava RxAndroid 入门使用用法 参照博文自己领悟使用解析

来源:互联网 发布:主动刹车 知乎 编辑:程序博客网 时间:2024/06/03 12:53


原创:转载请注明出处!!http://blog.csdn.net/wuqilianga/article/details/62423661


首先


RxJava 个人觉得太过于抽象了,不去多操练,多使用,多摸索,多巩固是学会了就忘,一看还是不懂,再看懵懂的感觉

这个是个好东西,能简化代码,加快编程提交代码的进度,也能很好地理解响应性编程的好处


首先这个东西我个人理解的方式是这样


由 两个东西  +  一个关系组成

第一个东西:发送端

第二个东西:接收端

一个关系 : 订阅关系


其中

发送端Observable) --  发送前执行器doOnSubscribe) --  发送器(just、from、OnSubscribe....) 

   -- 作用环境subscribeOn【指定发送器作用环境】;observeOn【指定下一个接收器作用环境】


发送的途中  --  转换发送端(lift / compose) --转换分解发送数据(map,flatMap)---转换分解集体发送端()  --    作用环境(同发送端一样)


接收端(Subscriber---接收器 (onNext/onError/onComplete/call.......) --    作用环境(同发送端一样)


下边是学习操作参考例子:

package com.xxx.swiperefreshlayoutdemo.rxjava;import com.xxx.swiperefreshlayoutdemo.okhttp_gson_pager.Okhttp_Gson_Pager_Data;import rx.Observable;import rx.Observable.OnSubscribe;import rx.Observable.Operator;import rx.Scheduler;import rx.Subscriber;import rx.android.schedulers.AndroidSchedulers;import rx.functions.Action0;import rx.functions.Action1;import rx.functions.Func1;import rx.schedulers.Schedulers;/** * Created by xxx on 2017/3/15. */public class RxJavaMain {    private static  String TAG = RxJavaMain.class.getSimpleName();    private static void method1() {        //这是发送端        Observable<Okhttp_Gson_Pager_Data> mOb = Observable.create(                //发送器                new OnSubscribe<Okhttp_Gson_Pager_Data>(){            @Override            public void call(Subscriber<? super Okhttp_Gson_Pager_Data> subscriber) {                subscriber.onNext(getData());                subscriber.onCompleted();            }        });        //这是接收端        Subscriber<Okhttp_Gson_Pager_Data> mSb = new Subscriber<Okhttp_Gson_Pager_Data>() {            //接收器            @Override            public void onCompleted() {                System.out.println("hello 我是er结尾的接收端onCompleted方法!");            }            @Override            public void onError(Throwable e) {                System.out.println("hello 我是er结尾的接收端onError方法!");            }            @Override            public void onNext(Okhttp_Gson_Pager_Data obj) {                System.out.println("hello 我是er结尾的接收端onNext方法!" + " 发送端发送的数据:" + obj.getError().getErr_code());            }        };        //建立联系        mOb.subscribe(mSb);    }    private static Okhttp_Gson_Pager_Data getData(){        Okhttp_Gson_Pager_Data obj = new Okhttp_Gson_Pager_Data();        Okhttp_Gson_Pager_Data.ErrorBean err = new Okhttp_Gson_Pager_Data.ErrorBean();        err.setErr_code(10001);        obj.setError(err);        //errorInfoSend ();        return obj;    }    private static void errorInfoSend (){        int i = 0;        i /= i;    }    private static void method2() {        //这是发送端        Observable<Okhttp_Gson_Pager_Data> mOb = Observable.just(getData());        //这是接收端        Action1<Okhttp_Gson_Pager_Data> onNextAction = new Action1<Okhttp_Gson_Pager_Data>() {            @Override            public void call(Okhttp_Gson_Pager_Data obj) {                System.out.println("hello 我是Action1的接收端call方法!" + " 发送端发送的数据:" + obj.getError().getErr_code());            }        };        Action1<Throwable> onErrorAction = new Action1<Throwable>() {            @Override            public void call(Throwable e) {                System.out.println("Action1<Throwable> onErrorAction --call(Throwable e) :");                e.printStackTrace();            }        };        Action0 onCompleteAction = new Action0() {            @Override            public void call() {                System.out.println("Action0 onCompleteAction --  call() :");            }        };        //建立联系        mOb.subscribe(onNextAction,onErrorAction,onCompleteAction);    }    private static void method3() {        //发送端        Observable                //发送数据                .just(getData())                //map是个输出类型转换函数                .map(new Func1<Okhttp_Gson_Pager_Data, Integer>() {                    @Override                    public Integer call(Okhttp_Gson_Pager_Data okhttp_gson_pager_data) {                        return okhttp_gson_pager_data.getError().getErr_code();                    }                })                //map是个输出类型转换函数                .map(new Func1<Integer, String>() {                    @Override                    public String call(Integer integer) {                        return integer + "";                    }                })                .subscribe(new Action1<String>() {                    @Override                    public void call(String s) {                        System.out.println("hello 我是Action1的接收端call方法!" + " 发送端发送的数据:" + s);                    }                });    }    /**lift 方法复杂版*/    private static void method4(){        //发送器        OnSubscribe mObOnSub = new OnSubscribe<String>() {            @Override            public void call(Subscriber<? super String> subscriber) {                subscriber.onNext("hello!-- Observable.OnSubscribe mObOnSub = new Observable.OnSubscribe<String>--");            }        };        //原始发送端        Observable<String> originObservable =  Observable.create(mObOnSub);        Operator operator = new Operator<Integer,String>(){            @Override            public Subscriber<? super String> call(final Subscriber<? super Integer> subscriber) {                return new Subscriber<String>() {                    @Override                    public void onCompleted() {                        subscriber.onCompleted();                    }                    @Override                    public void onError(Throwable e) {                        subscriber.onError(e);                    }                    @Override                    public void onNext(String s) {                        int value = Integer.valueOf(s);                        subscriber.onNext(value);                    }                };            }        };        //目标发送端        Observable targetObservable = originObservable.lift(operator);        targetObservable.subscribe(new Action1<Integer>() {            @Override            public void call(Integer obj) {                System.out.println(obj);            }        });    }    /***     * 将String类型的值转化为Integer类型的值乘以2并返回     * lift 简单版     */    private static void method5() {        //发送端        Observable                //发送器                .just("123")                //转换发送端                .lift(new Operator<Integer, String>() {                    @Override                    public Subscriber<? super String> call(final Subscriber<? super Integer> subscriber) {                        return new Subscriber<String>() {                            @Override                            public void onCompleted() {                                subscriber.onCompleted();                            }                            @Override                            public void onError(Throwable e) {                                subscriber.onError(e);                            }                            @Override                            public void onNext(String s) {                                int value = Integer.valueOf(s);                                value *= 2;                                subscriber.onNext(value);                            }                        };                    }                })                //转换发送器                .lift(new Operator<Integer, Integer>() {                    @Override                    public Subscriber<? super Integer> call(final Subscriber<? super Integer> subscriber) {                        return new Subscriber<Integer>() {                            @Override                            public void onCompleted() {                                subscriber.onCompleted();                            }                            @Override                            public void onError(Throwable e) {                                subscriber.onError(e);                            }                            @Override                            public void onNext(Integer integer) {                                integer *= 100;                                subscriber.onNext(integer);                            }                        };                    }                })                //转换输出类型器                .map(new Func1<Integer, String>() {                    @Override                    public String call(Integer integer) {                        return integer + "";                    }                })                //接收端                .subscribe(new Action1<String>() {                    //接收器                    @Override                    public void call(String obj) {                        System.out.println("最后一个接收器 - onNext: 返回结果:" + obj);                    }                });    }    private static Observable<String> liftAll(Observable observable) {        return observable                //转换发送端1                .lift(new Operator<String, String>() {                    @Override                    public Subscriber<? super String> call(final Subscriber<? super String> subscriber) {                        return new Subscriber<String>() {                            @Override                            public void onCompleted() {                                subscriber.onCompleted();                            }                            @Override                            public void onError(Throwable e) {                                subscriber.onError(e);                            }                            @Override                            public void onNext(String s) {                                subscriber.onNext(Integer.valueOf(s) * 5 + "");                            }                        };                    }                })                //转换发送端2                .lift(new Operator<String, String>() {                    @Override                    public Subscriber<? super String> call(final Subscriber<? super String> subscriber) {                        return new Subscriber<String>() {                            @Override                            public void onCompleted() {                                subscriber.onCompleted();                            }                            @Override                            public void onError(Throwable e) {                                subscriber.onError(e);                            }                            @Override                            public void onNext(String s) {                                subscriber.onNext(Integer.valueOf(s) * 5 + "");                            }                        };                    }                })                //转换发送端3                .lift(new Operator<String, String>() {                    @Override                    public Subscriber<? super String> call(final Subscriber<? super String> subscriber) {                        return new Subscriber<String>() {                            @Override                            public void onCompleted() {                                subscriber.onCompleted();                            }                            @Override                            public void onError(Throwable e) {                                subscriber.onError(e);                            }                            @Override                            public void onNext(String s) {                                subscriber.onNext(Integer.valueOf(s) * 5 + "");                            }                        };                    }                })                //转换发送端4                .lift(new Operator<String, String>() {                    @Override                    public Subscriber<? super String> call(final Subscriber<? super String> subscriber) {                        return new Subscriber<String>() {                            @Override                            public void onCompleted() {                                subscriber.onCompleted();                            }                            @Override                            public void onError(Throwable e) {                                subscriber.onError(e);                            }                            @Override                            public void onNext(String s) {                                subscriber.onNext(Integer.valueOf(s) * 5 + "");                            }                        };                    }                });    }    /**     * 升级版liftall使用     */    private static void  method6() {        liftAll(Observable.just("123")).subscribe(new Action1() {            @Override            public void call(Object obj) {                System.out.println("最后一个接收器 - onNext: 返回结果:" + obj);            }        });    }    /**     **     */    private static class LiftAllTransformer implements Observable.Transformer<Integer,String>{        @Override        public Observable<String> call(Observable<Integer> integerObservable) {            return liftAll(integerObservable);        }    }    /**     ** compose 包装多次lift操作,进行发送端转换器集合复用器     */    private static void method7() {        //发送端转换器 包装器        Observable.Transformer liftAll = new LiftAllTransformer();        //发送端        Observable                //发送器                .just("123")                //发送端转换器 包装器                .compose(liftAll)                //建立订阅关系                .subscribe(                        //接收端                        new Action1() {                            //接收器                            @Override                            public void call(Object obj) {                                System.out.println("最后一个接收器 - onNext: 返回结果:" + obj);                            }                        });    }    /**     ** Scheduler 线程使用     * subscribeOn(Schedulers.xxxx()) 作用于前边的发送器,在数据开始发送的时候,就已经产生作用环境     * .observeOn(AndroidSchedulers.mainThread() / Schedulers.xxxx()) 产生影响在接收端(Subscriber )的接收器前边     */    private static void method8() {        //发送端        Observable                //数组发送器                .from(new Integer[]{1,2,3,4})                //发送器 在IO线程发送,比较耗时的操作都在发送器操作                //.subscribeOn(Schedulers.io())                //下一个接收器  可以在一个新的线程中使用                //.observeOn(Schedulers.newThread())                //转换分解器 分解成一个个发送端                .flatMap(new Func1<Integer, Observable<String>>() {                    //分解转换过后,返回一个发送端                    @Override                    public Observable<String> call(Integer integer) {                        return Observable.just(integer + "");                    }                })                //下一个接收器  在IO线程中使用                //.observeOn(Schedulers.io())                .map(new Func1<String, Integer>() {                    @Override                    public Integer call(String s) {                        return Integer.valueOf(s);                    }                })                //下一个接收器  在主线程线程中使用,也即是UI可以更新的线程                //.observeOn(AndroidSchedulers.mainThread())                .subscribe(new Action1<Integer>() {                    @Override                    public void call(Integer obj) {                        System.out.println("最后一个接收器打印所有结果 - onNext: 返回结果:" + obj);                    }                });    }    /**     ** doOnSubscribe 这个方法发生在发送器(OnSubscribe、just、from)方法之前     * 作用,可以进行设置进度条的UI操作(android 端操作页面的需求)     */    private static void method9() {        //发送端        Observable                //发送器                .just("123")                //发送前执行器                .doOnSubscribe(new Action0() {                    @Override                    public void call() {                        System.out.println("发送器前执行器的结果:" + "hello,my first excute method doOnSubscribe!");                    }                })                //上一个数据发送器,工作的环境                //.subscribeOn(AndroidSchedulers.mainThread())                //建立关系                .subscribe(                        //接收端                        new Action1<String>() {                            //接收器                    @Override                    public void call(String s) {                        System.out.println("最后一个接收器 - onNext: 返回结果:" + s);                    }                });    }    public static void main(String args[]) {//        method1();//        method2();//        method3();//        method4();//        method5();//        method6();//        method7();//        method8();        method9();    }}



学习参考博文:http://gank.io/post/560e15be2dca930e00da1083#toc_12


0 0
原创粉丝点击