RxJava(RxAndroid)(一)(笔记)

来源:互联网 发布:武汉少儿编程培训班 编辑:程序博客网 时间:2024/05/29 10:57

最近开始接触RxJava(RxAndroid),但还是一脸懵逼,想到之前听过的一个建议是,先不管懂不懂,从头到尾敲一遍先。那就把敲过的代码一段一段地记录下来

1.一开始

  colorList = new ArrayList<>();        colorList.add("red");        colorList.add("green");        colorList.add("black");        colorList.add("white");        colorList.add("yellow");

  Observable<List<String>> listObservable = Observable.create(new Observable.OnSubscribe<List<String>>() {            @Override            public void call(Subscriber<? super List<String>> subscriber) {                subscriber.onNext(colorList);                subscriber.onCompleted();            }        });        Subscriber<List<String>> listSubscriber = new Subscriber<List<String>>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {            }            @Override            public void onNext(List<String> strings) {                StringBuffer stringBuffer = new StringBuffer();                for (int i = 0; i < strings.size(); i++)                    stringBuffer.append(strings.get(i));                tv1.setText(stringBuffer);            }        };        listObservable.subscribe(listSubscriber);
另外一种简洁写法,用于只发出一个事件:

        Observable<List<String>> listObservable = Observable.just(colorList);        listObservable.subscribe(new Observer<List<String>>() {            @Override            public void onCompleted() {            }            @Override            public void onError(Throwable e) {                tv1.setText("error");            }            @Override            public void onNext(List<String> strings) {                StringBuffer stringBuffer = new StringBuffer();                for (int i = 0; i < strings.size(); i++)                    stringBuffer.append(strings.get(i));                tv1.setText(stringBuffer);            }        });

如果不考虑onComplete和onError,那么更简化的写法:

 Observable.just(colorList).subscribe(new Action1<List<String>>() {            @Override            public void call(List<String> strings) {                StringBuffer stringBuffer = new StringBuffer();                for (int i = 0; i < strings.size(); i++)                    stringBuffer.append(strings.get(i));                tv1.setText(stringBuffer);            }        });

总结:首先要记住是有Observable和Subscriber这两个东西,然后Observable必须有Subscriber才能起作用,所以就必须会有出现订阅的地方。

           然后它会先订阅,然后执行onNext,当onNext执行完后,就会执行onComplete或是onError。

           Subscriber有三个重载方法,可以选择性的使用是onNext 或 onNext , onError还是 onNext ,onError,onComplete 。


2.加个操作符

  //第二部分 操作符 RxJava有大量的操作符,需要我们耐心地去学习        //首先还是一个最简单的例子//        Observable.just("Hello World").subscribe(new Action1<String>() {//            @Override//            public void call(String s) {//             tv1.setText(s);//                tv2.setText(s);//            }//        });        //现在要hello world的基础上做修改,加上个名字,那么可以这样写//        Observable.just("Hello World ——JD").subscribe(new Action1<String>() {//            @Override//            public void call(String s) {//                tv1.setText(s);//                tv2.setText(s);//            }//        });        //但当没有权限,或只是在某个地方增加名字而已,这样就不好了,因为上面那样写意味着所有的地方都会这样加签名,所以改成这样        //就只有一个textview是加上名字的//        Observable.just("Hello World").subscribe(new Action1<String>() {//            @Override//            public void call(String s) {//                tv1.setText(s + "——JD");//                tv2.setText(s);//            }//        });        //上面这种就实现了某个效果,现在换成用操作符看看,这里使用map操作符,之所以换成操作符是为了让Subscriber里做的事情越来越少        //map操作符就是把一个事件转换成另外一个事件,而且我觉得这样修改应该也是方便些,想删掉的话就直接把call部分删掉//        Observable.just("Hello World").map(new Func1<String, String>() {//            @Override//            public String call(String s) {//                return s + "——JD";//            }//        }).subscribe(new Action1<String>() {//            @Override//            public void call(String s) {//                tv1.setText(s);//                tv2.setText(s);//            }//        });        //然后我们再多增加一个map,现在就发现我们对数据类型发生了改变        Observable.just("Hello World").map(new Func1<String, String>() {            @Override            public String call(String s) {                return s + "——JD";            }        }).map(new Func1<String, Integer>() {            @Override            public Integer call(String s) {                return s.hashCode();            }        }).subscribe(new Action1<Integer>() {            @Override            public void call(Integer integer) {                tv1.setText(integer.toString());                tv2.setText(integer.toString());            }        });



参考来源:

深入浅出RxJava(一:基础篇)

从案例学RxAndroid开发(上)


0 0
原创粉丝点击