RxJava 备注

时间:2021-09-23 16:26:10

RxJava是一个采用观察者模式的异步框架,本文给出几个基本的使用例子。

1、配置依赖:

    compile 'io.reactivex:rxjava:1.0.14'
compile 'io.reactivex:rxandroid:1.0.1'

2、基础(发布、订阅):

observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("Step1");
subscriber.onNext("Step2");
subscriber.onNext("Step3");
subscriber.onCompleted();
}
}); subscriber = new Subscriber<String>() { @Override
public void onStart(){
System.out.println("onStart");
} @Override
public void onCompleted() {
System.out.println("onCompleted");
} @Override
public void onError(Throwable e) {
System.out.println("onError");
}
@Override
public void onNext(String s) {
System.out.println("onNext"+s);
}
}; FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
observable.subscribe(subscriber);
}
});

3、采用action的写法

Action1<String> onNextAction = new Action1<String>() {

            @Override
public void call(String s) {
System.out.println("onNextAction" + s);
}
}; Action1<Throwable> onErrorAction = new Action1<Throwable>() { @Override
public void call(Throwable throwable) {
System.out.println("onErrorAction");
}
}; Action0 onCompletedAction = new Action0() { @Override
public void call() {
System.out.println("onCompletedAction");
}
}; //from表示从一个数组中取参数
Observable.just("Step1","Step2")
.subscribe(onNextAction,onErrorAction,onCompletedAction);

4、Schedule接口

//Schedulers.immediate():默认值,当前线程
//Schedulers.computation():用以CPU密集型任务,固定线程池
//Schedulers.io():IO操作,不固定线程池
//Schedulers.newThread()://新线程
Observable.just("Step1","Step2")
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread()) //主线程
.subscribe(onNextAction, onErrorAction, onCompletedAction);

5、参数映射

List<String> input = new ArrayList<String>();
input.add("hello ");
input.add("world"); Observable.just(input)
.map(new Func1<List<String>, String>() {
@Override
public String call(List<String> input) { StringBuffer buffer = new StringBuffer(); for (String item : input) {
buffer.append(item);
} return buffer.toString();
}
})
.subscribe(new Action1<String>() {
@Override
public void call(String str) {
System.out.println(str);
}
});