当前位置: 代码迷 >> 综合 >> RxJava 1.0版本入门篇之--2
  详细解决方案

RxJava 1.0版本入门篇之--2

热度:96   发布时间:2023-10-08 23:29:10.0

延迟创建被观察者defer

    //defer方法创建的被观察者实际上没什么用  他是在订阅的时候在Call方法内部创建并发送一个新的被观察者供订阅的观察者关联//每关联一个观察者对象 那么特殊的被观察者内部就会多创建一个观察者关联Observable<String> observable = Observable.defer(new Func0<Observable<String>>() {@Overridepublic Observable<String> call() {Observable<String> observable1 = Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {subscriber.onNext("hello Android");}});return observable1;}});

just方法代替原始create方法

    Observable.
//                create(new Observable.OnSubscribe<String>() {
//            @Override
//            public void call(Subscriber<? super String> subscriber) {
//                if(!subscriber.isUnsubscribed()){
//                subscriber.onNext("好好学习");
//                subscriber.onNext("天天向上");
//                subscriber.onCompleted();
//                }
//            }
//        })just("好好学习","天天向上")//当所有事件发送完毕之后,它会自动调用onCompleted().subscribe(new Action1<String>() {@Overridepublic void call(String s) {Log.d("haha","call"+s);}});

操作队列的From方法

From函数发送一个队列的数据,输出的长度无线.

//1.定义被观察者,用来发送一个队列的事件
Observable<Student> observable=Observable.from(persons);

类定时器Interval&Timer

//第一个参数表示时间间隔,第二个参数表示时间单位的参数
Observable<Long>observable=Observable.interval(3000,TimeUnit.MILLISECONDS,Schedulers.io());Observable<Long>observable=Observable.timer(3000,2000,TimeUnit.MILLISECONDS);

数字操作Range&重复操作Repeat

    //range里面的参数取值表示范围Observable.range(1,100).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {Log.v("haha","call"+integer);}});//repeat()参数表示要重复的次数Observable.just("小二","王五").repeat(3).subscribe(new Action1<String>() {@Overridepublic void call(String s) {Log.v("haha",s);}});

延迟操作代码Delay

    //delay延迟发送消息Observable.create(new Observable.OnSubscribe<String>() {@Overridepublic void call(Subscriber<? super String> subscriber) {subscriber.onNext("hello");//如果发送异常,则直接抛出异常,上面一行代码将接收不到,后面的代码也执行不到
//                subscriber.onError(new NullPointerException("空指针"));subscriber.onNext("Android");}//delay 整体延迟5s}).delay(5000, TimeUnit.MILLISECONDS).subscribe(new Action1<String>() {@Overridepublic void call(String s) {Log.v("haha",s);}});

过滤重复选项的Distinct方法

Observable.from(initPersons())
//过滤重复名字的项
.distinct(new Func1<Student,String>){
.......
return student,name;}

Filter方法过滤指定条件的数据

    //filter 返回为真的数据将发送出去Observable.just(1,2,3,4,5,6).filter(new Func1<Integer, Boolean>() {@Overridepublic Boolean call(Integer integer) {return integer<4;}}).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {Log.v("haha",""+integer);}});

获取队列中某些数据First&Last&ElementAt

    //first获取队列的第一项数据,同理last()获取队列的最后一项数据,elementAt获取队列中的某个索引对应的数据Observable.just(1,2,3,4,5,6)//.first()
//                .last().elementAt(3).subscribe(new Action1<Integer>() {@Overridepublic void call(Integer integer) {Log.v("haha",""+integer);}});

获取指定集合的数据Take&TakeLast

    //take获取队列中的前n个元素,takeLast获取队列中的后n个元素Observable.just(1,2,3,4,5,6)

// .take(3)
.takeLast(3)
.subscribe(new Action1() {
@Override
public void call(Integer integer) {
Log.v(“haha”,”“+integer);
}
});

Sample&IgnoreElements

   //sample对发送数据进行一定频率的采样发送Observable.interval(1000,TimeUnit.MILLISECONDS).sample(2000,TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {@Overridepublic void call(Long aLong) {Log.v("haha",""+aLong);}});
}//ignoreElements  不关心Observable发送的数据,在完成时或遇到错误终止时收到通知,永远不会调用观察者的onNext()方法Observable.just(1,2,3,4,5,6).ignoreElements()  //不发送任何信息 直接发送onCompleted().subscribe(new Subscriber<Integer>() {@Overridepublic void onCompleted() {Log.v("haha","onCompleted");}@Overridepublic void onError(Throwable e) {}@Overridepublic void onNext(Integer integer) {Log.v("haha",""+integer);}});