android rxjava的简单使用

来源:互联网 发布:希区柯克剧场 知乎 编辑:程序博客网 时间:2024/04/30 19:15

rxjava很强大,非常强大。我很喜欢。嘿嘿

刚接触rxjava不久,整理了下代码,留个备份。

首先不清楚观察者的,建议去网上看下先。不然肯定是懵逼的。  

目录

/**第一个简单使用*/protected abstract void testRxJava();/**简化*/protected abstract void testRxJava1();/**转换map*/protected abstract void testRxJava2();/**转换flatmap*/protected abstract void testRxJava3();/**just集合操作*/protected abstract void testRxJava4();/**toList() take()用法 */protected abstract void testRxJava5();/**interval() take()用法*/protected abstract void testRxJava6();/**subscribeOn(Schedulers.io())线程执行的问题*/protected abstract void testRxJava7();

根据目录,可以匹配对应的功能例子

1.

@Overrideprotected  void testRxJava() {    Observable<String> myObservable = Observable.create(new Observable.OnSubscribe<String>(){        @Override        public void call(Subscriber<? super String> subscriber) {            subscriber.onNext("被观察者  发送的数据");            subscriber.onCompleted();        }    });    Subscriber<String> mySubscriber = new Subscriber<String>() {        @Override        public void onCompleted() {        }        @Override        public void onError(Throwable e) {        }        @Override        public void onNext(String s) {            Log.d("接受到的被观察者的消息",s + "testRxJava");        }    };    /**订阅 建立联系*/    myObservable.subscribe(mySubscriber);}

2.

@Overrideprotected void testRxJava1() {   // Observable<String> myObservable = Observable.just("发送数据");    //new Action1 是 new Subscriber的简写  只包含call方法   也可以自行了解 Action0 等方法    Observable.just("发送数据").subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.d("接收到的数据:", s + "testRxJava1");        }    });}

3.

@Overrideprotected void testRxJava2() {    Observable.just("发送数据").map(new Func1<String, String>() {        @Override        public String call(String s) {            return s + "中途穿插";        }    }).subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.d("接收到的数据",s + "testRxJava2");    }    });}

4.
@Overrideprotected void testRxJava3() {    Observable.just("发送数据").flatMap(new Func1<String, Observable<String>>() {        @Override        public Observable<String> call(String s) {            return Observable.just("中间搞下事情");        }    }).subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.d("接收到的数据",s + "testRxJava3");        }    });}

5.

@Overrideprotected void testRxJava4() {    List<String> list = new ArrayList<String>();    list.add("a");    list.add("b");    list.add("c");    Observable.just(list).subscribe(new Action1<List<String>>() {        @Override        public void call(List<String> strings) {            String result = "";            for (String item : strings){                result += item;            }            Log.d("testRxJava4 结果:",result);        }    });    /** 注意,just()方法也可以传list,但是发送的是整个list对象,而from()发送的是list的一个item     *     */    Observable.from(list).subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.d("testRxJava4 结果2:",s);        }    });    Observable.from(list).map(new Func1<String, String>() {        @Override        public String call(String s) {            if(s.equals("c")){                return s + "lahm";            }            return s;        }    }).subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.d("testRxJava4 结果3:",s);        }    });}

6.

/** * toList 总结:可以看到这里讲String[] 数组类型转化为List类型了,toList()操作符的目的应该是将所有的数据放进一个List中去, * 然后将这个List传递给这里的subscribe。 * * take 只发射前面的N项数据 */@Overrideprotected void testRxJava5() {    String [] data = new String[]{"a","b","c"};    Observable.from(data).take(2).toList().subscribe(new Action1<List<String>>() {        @Override        public void call(List<String> strings) {            String result = "";            for(String item : strings) result += item;            Log.d("testRxJava5 结果:",result);        }    });}

7.

/*** * *  take 只发射前面的N项数据 */@Overrideprotected void testRxJava6() {    //这个方法时2秒后轮训,轮训的间隔时间是3秒    //除了  ed限时输入 验证码   还没发现其他的用法    Observable.interval(2,3, TimeUnit.SECONDS).take(3).subscribeOn(Schedulers.io()).subscribe(new Action1<Long>() {        @Override        public void call(Long aLong) {            Log.d("testRxJava6 结果:",aLong+"");        }    });}

8.

/*** * subscribeOn(Schedulers.io()) 线程执行的问题 */@Overrideprotected void testRxJava7() {    Observable.just("测试").map(new Func1<String, String>() {        @Override        public String call(String s) {            Log.d("testRxJava7:","map执行的线程:"+Thread.currentThread().getName());            return s+"转换1";        }    })            //result   RxIoScheduler-3    //.subscribeOn(Schedulers.io())    //main    .subscribeOn(AndroidSchedulers.mainThread())    .subscribe(new Action1<String>() {        @Override        public void call(String s) {            Log.d("testRxJava7:","接收执行的线程:"+Thread.currentThread().getName());        }    });}


0 0
原创粉丝点击