Rxjava1初识

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_35189116/article/details/72675400

要想学会Rxjava,我们得来看它的原理--观察者模式,什么是观察者模式,它分为三个部分 1.观察者(Observer),2被观察者(Observable),3.事件,这里我给大家举个的例子

  比如说我们开灯这个事情,其中这个按钮就是被观察者,而灯就是观察者,也就是说灯亮与不亮 要靠按钮的变化,只要按钮改变状态了灯也会相应改变,这就是典型的观察者模式 大家应该有点意识了。下面给一个小demo加深理解,代码很简单我就不废话,直接上代码:

//观察者一

public class G1 implements listener{


    public void onlisten(){


        System.out.println("G1知道了");
    }
}

//观察者二

public class G2 implements listener{


    public void onlisten(){


        System.out.println("G2知道了");
    }
}

//观察者三

public class G3 implements listener{


    public void onlisten(){


        System.out.println("G3知道了");
    }
}

//定义一接口,用来改变观察者

public interface listener {
    void onlisten();
}

//被观察者

public class Observers {


    private List<listener> listenerList = new ArrayList<>();
    //改变了通知观察者


    public void onchange(){
        for (int i = 0; i < listenerList.size(); i++) {
            listenerList.get(i).onlisten();
        }
    }
    public void addobs(listener list){


        listenerList.add(list);
    }


    public static void main(String[] args) {

    //直接可以main函数里面增减观察者
        G1 g1 = new G1();
        G2 g2 = new G2();
        G3 g3 = new G3();
        Observers observers = new Observers();
        observers.addobs(g1);
        observers.addobs(g2);
        observers.addobs(g3);
        observers.onchange();
    }


}

好了,现在来看下Rxjava的基本API,也是以demo直接上代码:

先引包:

    compile 'io.reactivex:rxjava:1.1.8'
    compile 'io.reactivex:rxandroid:1.2.1'

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);


    }


    public static void main(String[] args) {
       /* //观察者
        Observer<String> gcz = new Observer<String>() {
            @Override
            //接收消息完毕
            public void onCompleted() {
                System.out.println("OK");
                System.out.println("onCompleted"+Thread.currentThread().getName());
            }
            //接收消息出错
            @Override
            public void onError(Throwable e) {


            }
            //接收到的数据
            @Override
            public void onNext(String s) {
                 System.out.println(s);
                System.out.println("onNext"+Thread.currentThread().getName());
            }
        };


        //被观察者
        Observable<String> bgcz = Observable.create(new Observable.OnSubscribe<String>(){


            @Override
            public void call(Subscriber<? super String> subscriber) {
                  subscriber.onNext("勒布朗詹姆斯");
                  subscriber.onNext("科比");
                  subscriber.onCompleted();
                  System.out.println("call"+Thread.currentThread().getName());


            }
        });
        //订阅
        bgcz.subscribe(gcz);*/
        //标准写法(链式编程)
       /*Observable.create(new Observable.OnSubscribe<String>() {
           @Override
           public void call(Subscriber<? super String> subscriber) {
               subscriber.onNext("科比");
               subscriber.onNext("詹姆斯");
               subscriber.onCompleted();
           }
       }).subscribe(new Observer<String>() {
           @Override
           public void onCompleted() {
               System.out.println("OK");
           }


           @Override
           public void onError(Throwable e) {


           }


           @Override
           public void onNext(String s) {
               System.out.println("------->"+s);
           }
       });*/
       /* Subscription subscribe = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("科比");
                subscriber.onNext("詹姆斯");
                subscriber.onCompleted();
            }
        }).subscribe(new Subscriber<String>() {
            //在订阅之前就开始执行,用于一些准备工作
            @Override
            public void onStart() {
                super.onStart();
                System.out.println("我先运行了");
            }


            @Override
            public void onCompleted() {
                System.out.println("OK");
            }


            @Override
            public void onError(Throwable e) {


            }


            @Override
            public void onNext(String s) {
                System.out.println("------->"+s);
            }


        });
        //取消订阅
        //subscribe.unsubscribe();*/
       /* Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext("科比");
                subscriber.onNext("詹姆斯");
                subscriber.onCompleted();
            }
        }).subscribe(new Action1<String>() {
            @Override
            //相当于onNext(String s)方法
            public void call(String s) {
                System.out.println("------->" + s);
            }
        }, new Action1<Throwable>() {
            @Override
            //相当于onError(Throwable e)方法
            public void call(Throwable throwable) {


            }
        }, new Action0() {
            @Override
            //相当于onCompleted()方法
            public void call() {
                System.out.println("OK");
            }
        });*/
        /*Subscription subscribe = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
                  subscriber.onNext("科比");


                  subscriber.onCompleted();
            }
        }).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                System.out.println(s);
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {


            }
        }, new Action0() {
            @Override
            public void call() {
                System.out.println("ok");
            }
        });*/
        //取消订阅
        //subscribe.unsubscribe();
        //just()依次发送消息
        /*Observable.just("科比","詹姆斯","欧文")
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });*/
        /*//from()发送一个集合等。。
        ArrayList<String> list = new ArrayList<>();
        for (int i = 0; i < 4; i++) {
            list.add("科比"+i);
        }
        Observable.from(list)
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String s) {
                        System.out.println(s);
                    }
                });*/
        //empty():发送一个空消息
       /* Observable.empty().
                subscribe(new Observer () {


                    @Override
                    public void onCompleted() {
                        System.out.println("ok");
                    }


                    @Override
                    public void onError(Throwable e) {


                    }


                    @Override
                    public void onNext(Object s) {


                    }
         */
     //defer();区分两个不同时间段的返回出的被订阅者
        /*Observable<Long> defer = Observable.defer(new Func0<Observable<Long>>() {
            @Override
            public Observable<Long> call() {
                return Observable.just(System.currentTimeMillis());
            }
        });


        defer.subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                System.out.println(aLong);
            }
        });
        try {
            Thread.sleep(1000);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        defer.subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                System.out.println(aLong);
            }
        });*/
        //range()方法就是从第一个参数开始数按升序一直数到第(第二个参数)个为止期间依次发送出去
       /* Observable.range(1,10)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println(integer);
                    }
                });*/
       //timer():延迟时间发送
        /*System.out.println("开始发生");
        Observable.timer(2, TimeUnit.SECONDS)
               .subscribe(new Subscriber<Long>() {
                   @Override
                   public void onCompleted() {
                       System.out.println("ok");
                   }


                   @Override
                   public void onError(Throwable e) {


                   }


                   @Override
                   public void onNext(Long aLong) {


                   }
               });


        while (true);*/


      /*Observable.interval(5,1,TimeUnit.SECONDS)
              .subscribe(new Action1<Long>() {
                  @Override
                  public void call(Long aLong) {
                      System.out.println(aLong);
                  }
              });
        while (true);*/
      //过滤
     /* Observable.range(0,10).filter(new Func1<Integer, Boolean>() {
          @Override
          public Boolean call(Integer integer) {
              return integer % 2 == 0;
          }
      }).subscribe(new Action1<Integer>() {
          @Override
          public void call(Integer integer) {
              System.out.println(integer);
          }
      });*/
       /* Integer[] integers = {2,1,5,6,4,1,6,2,3,0,0,3,2,3,2,0};
        Observable.from(integers)
                //.distinct()
                .distinctUntilChanged()
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println(integer);
                    }
                });*/
      /* Observable.create(new Observable.OnSubscribe<String>() {


           @Override
           public void call(Subscriber<? super String> subscriber) {
               subscriber.onCompleted();
           }
       }).ignoreElements().subscribe(new Action1<String>() {
           @Override
           public void call(String s) {
               System.out.println(s);
           }
       }, new Action1<Throwable>() {
           @Override
           public void call(Throwable throwable) {


           }
       }, new Action0() {
           @Override
           public void call() {
               System.out.println("ok");
           }
       });*/
      /*Observable.interval(1,TimeUnit.SECONDS)
             // .take(5,TimeUnit.SECONDS)
              .skip(5,TimeUnit.SECONDS)
              .subscribe(new Action1<Long>() {
                  @Override
                  public void call(Long aLong) {
                      System.out.println(aLong);
                  }
              });
        while (true);*/
    }
}

好了!先说这些吧


猜你喜欢

转载自blog.csdn.net/qq_35189116/article/details/72675400