RxJava1.0的依赖
compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'
package com.example.rxjava10;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import rx.Observable;
import rx.Observer;
import rx.Subscriber;
import rx.functions.Action0;
import rx.functions.Action1;
import rx.functions.Func1;
import rx.schedulers.Schedulers;
/**
* // 1.RxJava观察者模式
* // 2.链式调用
* // 3.非常灵活的线程调度,异步任务框架
* // 4.灵活的操作符
*/
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
// 被观察者创建的3种方式
private Button btnJust;
private Button btnFrom;
private Button btnCreate;
// 观察者创建的方式
private Button btnObserver;
private Button btnSubscribe;
private Button btnAction0;
private Button btnAction1;
private Button btnAction2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 被观察者
btnJust = (Button) findViewById(R.id.btn_rx_just);
btnFrom = (Button) findViewById(R.id.btn_rx_from);
btnCreate = (Button) findViewById(R.id.btn_rx_create);
btnJust.setOnClickListener(this);
btnFrom.setOnClickListener(this);
btnCreate.setOnClickListener(this);
//观察者
btnObserver = (Button) findViewById(R.id.btn_rx_observer);
btnSubscribe = (Button) findViewById(R.id.btn_rx_subscriber);
btnAction0 = (Button) findViewById(R.id.btn_rx_action0);
btnAction1 = (Button) findViewById(R.id.btn_rx_action1);
btnAction2 = (Button) findViewById(R.id.btn_rx_action2);
btnObserver.setOnClickListener(this);
btnSubscribe.setOnClickListener(this);
btnAction0.setOnClickListener(this);
btnAction1.setOnClickListener(this);
btnAction2.setOnClickListener(this);
}
@Override
public void onClick(View view) {
switch (view.getId()){
// 被观察者创建
case R.id.btn_rx_just:
Observable observable1 = Observable.just(1, 2, 3, 4);
break;
case R.id.btn_rx_from:
String[] strs={"陈德敏","柴晓凯","杨栓","马悦"};
Observable observable2 = Observable.from(strs);
break;
case R.id.btn_rx_create:
Observable observable3= Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Hello");
subscriber.onNext("Word");
subscriber.onNext("Java");
}
});
break;
//观察者创建
case R.id.btn_rx_observer:
Observable observable4 = Observable.just(1, 2, 3, 4);
Subscriber<Integer> subscriber = new Subscriber<Integer>() {
//新增一个onstart方法
@Override
public void onStart() {
super.onStart();
}
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
Toast.makeText(MainActivity.this,"onNext: " + integer,Toast.LENGTH_SHORT).show();
}
};
//订阅事件 语法上是被观察者订阅观察者,实际上是观察者订阅被观察者,为了方便语法上的链式调用
observable4.subscribe(subscriber);
break;
case R.id.btn_rx_subscriber:
Observable<Integer> observable5 = Observable.just(1, 2, 3, 4);
Observer<Integer> observer = new Observer<Integer>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Integer integer) {
Toast.makeText(MainActivity.this,"onNext: " + integer,Toast.LENGTH_SHORT).show();
}
};
observable5.subscribe(observer);
break;
case R.id.btn_rx_action0:
// 观察者第三种创建方式
Observable<Integer> observable6 = Observable.just(1, 2, 3, 4);
Action1<Integer> integerAction1 = new Action1<Integer>(){
@Override
public void call(Integer integer) {
Toast.makeText(MainActivity.this,"onNext: " + integer,Toast.LENGTH_SHORT).show();
}
};
observable6.subscribe(integerAction1);
break;
case R.id.btn_rx_action1:
// 闭包
Observable<Integer> observable7 = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
subscriber.onNext(1);
subscriber.onNext(2);
subscriber.onNext(3);
subscriber.onNext(4);
subscriber.onError(new Throwable("这是一条错误信息"));
}
});
Action1<Integer> action1 = new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.e("TAG", "call: " + integer);
}
};
Action1<Throwable> action2 = new Action1<Throwable>() {
@Override
public void call(Throwable o) {
Log.e("TAG", "call: " + o.getMessage());
}
};
observable7.subscribe(action1, action2);
break;
case R.id.btn_rx_action2:
Observable<Integer> observable8 = Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
subscriber.onNext(1);
subscriber.onNext(2);
subscriber.onNext(3);
subscriber.onNext(4);
// onCompleted和onError只能执行一个
subscriber.onCompleted();
// subscriber.onError(new Throwable("这是一条错误信息"));
}
});
Action1<Integer> action21 = new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.i("tag", "call: " + integer);
}
};
Action1<Throwable> action22 = new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
Log.e("tag", "call: " + throwable.getMessage());
}
};
// subscriber.onCompleted();在这里调用
Action0 action20 = new Action0() {
@Override
public void call() {
Log.i("tag", "call: onComplete");
}
};
observable8.subscribe(action21, action22, action20);
break;
}
}
}