RxJava学习(一)

一.概述

从今天开始好好研究一下RxJava,最近好像很流行,好多开源项目都使用到了。RxJava最核心的两个东西是Observable(被观察者,事件源)和Subscriber(观察者)

二.代码

创建Observable
调用Observable对象的静态create方法
RxJava学习(一)_第1张图片
重写call方法

 Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
            @Override
            public void call(Subscriber<? super String> subscriber) {
            //相当于调用了Subscriber对应的方法
                subscriber.onNext("hellorxjava");
                subscriber.onCompleted();
            }
        });

创建Subscriber

   Subscriber<String> subscriber = new Subscriber<String>() {
            @Override
            public void onCompleted() {
            }
            @Override
            public void onError(Throwable e) {
            }
            @Override
            public void onNext(String s) {
                mTextView.setText(s);
            }
        };

将两者关联起来
调用subscribe函数,构造方法如下
RxJava学习(一)_第2张图片

 observable.subscribe(subscriber);

我们一般只关心onNext函数,这时可以这样写
RxJava学习(一)_第3张图片

调用just函数,参数为传递给onNext函数的值,然后调用subscribe方法,我们可以看到这个方法可以接收三个参数,Action1,Action1,Action0,分别对应onNext,onError,onCompelete.

  //只实现onNext
        Observable.just("first").subscribe(new Action1<String>() {
            @Override
            public void call(String s) {

            }
        });
   //全部实现
        Observable.just("helloandrid").subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.d(TAG, "call: onNext");
            }
        }, new Action1<Throwable>() {
            @Override
            public void call(Throwable throwable) {
                Log.d(TAG, "call: onError");
            }
        }, new Action0() {
            @Override
            public void call() {
                Log.d(TAG, "call: onComplete");
            }
        });

关于just操作符这里还要说一点,不管我们是否进行了订阅,just中的函数都会执行,比如下面的例子。

  protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Observable.just(add(1,2));
    }
    public int add(int a,int b){
        Toast.makeText(this, "执行了", Toast.LENGTH_SHORT).show();
        return a+b;
    }

我们并没有进行订阅,但是还是会执行方法。

结果转换

主要使用map操作符
先看看map方法的定义

这里写图片描述

接收两个参数,第一个参数的类型是just函数中内容所对应的类型,比如“hello”对应String,数字对应Integer,一旦我们确定了just函数的内容,这个参数的类型就不能变了。

第二个参数的值是最终结果的类型,

用法一
我们要把输入的hello变为hello android

 Observable.just("hello").map(new Func1<String, String>() {
            @Override
            public String call(String s) {
                return s+" android";
            }
        }).subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                mTextView.setText(s);//s = "hello android"
            }
        });
  //类型变换
        Observable.just("adf").map(new Func1<String, Integer>() {
            @Override
            public Integer call(String s) {
                return s.hashCode();
            }
        }).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer result) {
                mTextView.setText(result);
            }
        });

你可能感兴趣的:(RxJava学习(一))