參考的博文
看過好多rxjava的文章实愚。兼呵。感覺這個最好本文例子基本都是copy里面的,只是為了方便自己記憶腊敲。當(dāng)做工具
這個是rxjava 1.x版本的特別特別好的
例子 1 普通的訂閱
image.png
/**
* 1 上下級訂閱 鏈?zhǔn)讲僮? */
//上游
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {
observableEmitter.onNext("1");
observableEmitter.onNext("2");
observableEmitter.onNext("3");
observableEmitter.onComplete();
}
//訂閱下游
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(Disposable disposable) {
}
@Override
public void onNext(String s) {
}
@Override
public void onError(Throwable throwable) {
}
@Override
public void onComplete() {
}
});
例子2 去除下游不需要實現(xiàn)的太多方法
image.png
/**
* 2 上下級訂閱 簡化下游實現(xiàn)方法太多
*/
//上游
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {
observableEmitter.onNext("1");
observableEmitter.onNext("2");
observableEmitter.onNext("3");
observableEmitter.onComplete();
}
//訂閱下游
}).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
}, new Consumer<Throwable>() {
@Override
public void accept(Throwable throwable) throws Exception {
}
});
例子3 上游代碼在其他線程執(zhí)行,(例如請求網(wǎng)絡(luò)的操作),下游代碼在主線程執(zhí)行
image.png
/**
* 3 上游代碼在其他線程執(zhí)行,(例如請求網(wǎng)絡(luò)的操作),下游代碼在主線程執(zhí)行
*/
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {
observableEmitter.onNext("1");
observableEmitter.onNext("2");
observableEmitter.onNext("3");
observableEmitter.onComplete();
}
}).subscribeOn(Schedulers.newThread()).observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
例子4 rxjava和retrofit的聯(lián)合使用
例子5 rxjava中map的使用
map--將observable中的原始的數(shù)據(jù)格式進(jìn)行轉(zhuǎn)換并且返回一個observable的類型例如開始傳入的類型是String類型的碰辅。懂昂。經(jīng)過中游(map)的轉(zhuǎn)換。没宾。下游就可以接收到int類型的數(shù)據(jù)而不是之前的String凌彬。
image.png
/**
* 5 map observable的格式轉(zhuǎn)換
*/
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {
observableEmitter.onNext("1");
observableEmitter.onNext("2");
observableEmitter.onNext("3");
observableEmitter.onComplete();
}
}).map(new Function<String, Integer>() {
@Override
public Integer apply(String s) throws Exception {
return Integer.parseInt(s);
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
}
});
例子6 rxjava中flatmap和concatMap的使用
flatmap 不一定會按照上游發(fā)送的順序給下游發(fā)送。循衰。concatMap會嚴(yán)格按照上游發(fā)送的順序發(fā)送事件
image.png
/**
* 6 flapMap observable的格式轉(zhuǎn)換
*/
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> observableEmitter) throws Exception {
observableEmitter.onNext("1");
observableEmitter.onNext("2");
observableEmitter.onNext("3");
observableEmitter.onComplete();
}
}).flatMap(new Function<String, ObservableSource<Integer>>() {
@Override
public ObservableSource<Integer> apply(String s) throws Exception {
return new ObservableSource<Integer>() {
@Override
public void subscribe(Observer<? super Integer> observer) {
observer.onNext(1);
observer.onNext(2);
observer.onNext(3);
observer.onComplete();
}
};
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
}
});
例子7 Observable 創(chuàng)建的其他快捷方式
/**
* 7 Observable 創(chuàng)建的其他快捷方式
*/
Observable.just("1","2").subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
Observable.fromIterable(Arrays.asList("1","2")).subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
Observable.fromArray("1","2","3").subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
}
});
例子8 zip操作符
/**
* 8 zip操作符 可用在例如多個網(wǎng)絡(luò)操作铲敛,顯示loading,當(dāng)多個網(wǎng)絡(luò)操作都結(jié)束的時候 在最后關(guān)閉loading羹蚣、
*/
Observable observable1 = Observable.just(1);
Observable observable2 = Observable.just("1", "2");
Observable.zip(observable1, observable2, new BiFunction<Integer, String, String>() {
@Override
public String apply(Integer integer, String s) throws Exception {
return integer + s;
}
}).subscribe(new Consumer() {
@Override
public void accept(Object o) throws Exception {
}
});
例子9 filter 過濾操作符
/**
* 9 filter 過濾操作符
*/
Observable.just(1,2,3).filter(new Predicate<Integer>() {
@Override
public boolean test(Integer integer) throws Exception {
return true;
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
}
});