RxAndroid的使用方式

RxAndroid是RxJava的扩展, 可以优雅地处理异步请求. 以前的文章讲述过一些, 这次再补充些内容, 熟悉RxAndroid的使用方法.

对应github的网址

https://github.com/ReactiveX/RxJava
https://github.com/ReactiveX/RxAndroid
https://github.com/JakeWharton/butterknife
https://github.com/evant/gradle-retrolambda

添加Gradle配置 在app下的build.gradle如下:

apply plugin: 'android-apt'

android {
  ...
}

dependencies {
  compile 'io.reactivex:rxandroid:1.2.1' 
  compile 'io.reactivex:rxjava:1.1.6' 
  compile 'com.jakewharton:butterknife:8.2.1'
  apt 'com.jakewharton:butterknife-compiler:8.2.1'
}

在根目录下的build.gradle如下:

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        // NOTE: Do not place your application dependencies here; they belong
        // in the individual module build.gradle files
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}

1.SimpleActivity

先定义全局变量

    Observable.OnSubscribe<String> mOnSubscribe;//观察者
    Subscriber<String> mSubscriber1;//订阅者
    Subscriber<String> mSubscriber2;
    //ButterKnife控件查找
    @BindView(R.id.textView)
    TextView mTvText;

首先要绑定nutterknife,然后初始化对应观察者和订阅者,最后绑定到一起

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

        ButterKnife.bind(this);
        initObservable();
        initSubscriber1();
        initSubscriber2();
        bindinit();
    }

初始化的代码如下:创建一个观察者, 收到字符串的返回。创建两个订阅者, 使用字符串输出信息。

 private void initObservable(){
        mOnSubscribe = new Observable.OnSubscribe<String>() {
            @Override public void call(Subscriber<? super String> subscriber) {
                subscriber.onNext(sayHellow()); // 发送事件
                subscriber.onCompleted(); // 完成事件
            }
        };
    }

    private void initSubscriber1(){
        mSubscriber1 = new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                Toast.makeText(SimpleActivity.this,s,Toast.LENGTH_LONG).show(); // 设置文字
            }
        };
    }
    private void initSubscriber2(){
        mSubscriber2 = new Subscriber<String>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(String s) {
                mTvText.setText(s); // 设置文字
            }
        };
    }
    private String sayHellow() {
        return "欢迎使用";
    }

绑定的代码如下:观察者接收信息, 发送至主线程AndroidSchedulers.mainThread(), 再传递给订阅者, 由订阅者最终处理消息. 接收信息可以是同步, 也可以是异步.

   private void bindinit() {
        Observable<String> observable = Observable.create(mOnSubscribe);
        observable.observeOn(AndroidSchedulers.mainThread());
        observable.subscribe(mSubscriber1);
        observable.subscribe(mSubscriber2);
    }