1.Create:
private void create(){
//create 创建Observable
//Observable 被观察者
//Subscribers观察者
Observable<String> observable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
Log.i(TAG,"call.....");
if(!subscriber.isUnsubscribed()) {
subscriber.onNext("我被执行了1");
subscriber.onNext("我被执行了2");
subscriber.onNext("我被执行了3");
subscriber.onNext("我被执行了4");
subscriber.onNext("我被执行了5");
subscriber.onNext("我被执行了6");
subscriber.onCompleted();
}
}
});
//完成订阅
observable.subscribe(new Subscriber<String>() {
@Override
public void onCompleted() {
Log.i(TAG,"onCompleted") ;
}
@Override
public void onError(Throwable e) {
Log.i(TAG,"onError:"+e.getMessage());
}
@Override
public void onNext(String s) {
Log.i(TAG,"onNext:"+s);
}
}) ;
}
2.from:
private void from(){
//from 也可以创建Observable
Integer[] arr = {0,1,2,3,4};
//完成创建Observable
Observable<Integer> from = Observable.from(arr);
//完成订阅
from.subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
Log.i(TAG,"onCompleted") ;
}
@Override
public void onError(Throwable e) {
Log.i(TAG,"onError:"+e.getMessage());
}
@Override
public void onNext(Integer s) {
Log.i(TAG,"onNext:"+s);
}
}) ;
}
3.just:
private void just(){
//just 也可以创建Observable 参数是可变参数
Observable.just(0, 1, 2, 3, 4, 5)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.i(TAG,"call:"+integer);
}
}) ;
}
4.map:
private void map(){
//map 变换,在该实例中,将Integer转换成String
//在实际开发中,需要通过String类型的url获取到图片
String[] urls = {};
Observable.from(urls)
.map(new Func1<String, Bitmap>() {
@Override
public Bitmap call(String s) {
//s 代表图片url,网络请求通过url 获取到图片
return null;
}
}).subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {
//iv.setBackage()
}
});
/*Observable.just(0,1,2,3)
.map(new Func1<Integer, String>() {
@Override
public String call(Integer integer) {
return integer+"转换了";
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.i(TAG,"call:"+s);//0转换了 1转换了。。。
}
});*/
}
5.flatmap:
private void flatmap(){
//flatmap 转换 将多个Observable转换成一个Observalbe然后发送
//获取城市的天气
/**
*
* map 是将一种类型转换成另一种类型(可以是任意类型)
*
* flatmap 是将一种类转换成Observable(泛型可以是任意的)
*
*/
String[] citys = {"北京","上海","杭州"};
Observable.from(citys)
.flatMap(new Func1<String, Observable<WeathData>>() {
@Override
public Observable<WeathData> call(String s) {
return getCityWeathData(s);
}
}).subscribe(new Action1<WeathData>() {
@Override
public void call(WeathData weathData) {
Log.i(TAG,weathData.city+weathData.state);
}
});
}
6.zip:
private void zip(){
//zip 将两个Observable按照规则严格的合成一个Observable
Observable<Integer> observable1 = Observable.just(10, 20, 30,40);
Observable<Integer> observable2 = Observable.just(1, 2, 3,4);
Observable.zip(observable1, observable2, new Func2<Integer, Integer, String>() {
@Override
public String call(Integer integer, Integer integer2) {
//定义合并规则
return integer + integer2 + "abc";
}
}).subscribe(new Action1<String>() {
@Override
public void call(String string) {
Log.i(TAG,"call:"+string) ;
}
});
}
7.zipwith:
private void zipwith(){
//zipwith 将本身与其他的Observable按照规则严格的合并成一个Observable
Observable.just(10,20,30,40)
.zipWith(Observable.just("a", "b", "c"), new Func2<Integer, String, String>() {
@Override
public String call(Integer integer, String s) {
//合并规则
return integer + s ;
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
Log.i(TAG,"call:"+s) ;
}
});
}
8.retry:
private void retry(){
//retry 在出错的时候重试(异常的时候重新执行)
//用处:网络连接异常的时候
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
try {
for (int i = 0; i < 5; i++) {
if (i == 3) {
throw new Exception("出错了");
}
subscriber.onNext(i);
}
subscriber.onCompleted();
}catch (Exception e){
subscriber.onError(e);
}
}
}).retry(2).subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
Log.i(TAG,"onCompleted");
}
@Override
public void onError(Throwable e) {
Log.i(TAG,"onError:"+e.getMessage()) ;
}
@Override
public void onNext(Integer integer) {
Log.i(TAG,"onNext:"+integer) ;
}
});
}
9.retrywhen:
private void retrywhen(){
//retrywhen 异常的时候执行
//网络请求框架中,一般使用retryWhen 要执行操作是连接网络,连接出异常的时候,
// 1、我们可以直接重复执行连接网络,retry
// 2、同时我们也可以判断连接异常的类型,再做决定是否重连 retyrWhen
Observable.create(new Observable.OnSubscribe<Integer>() {
@Override
public void call(Subscriber<? super Integer> subscriber) {
Log.i(TAG,"总出错");
subscriber.onError(new Throwable("出错了"));
}
}).retryWhen(new Func1<Observable<? extends Throwable>, Observable<?>>() {
@Override
public Observable<?> call(Observable<? extends Throwable> observable) {
return observable.zipWith(Observable.range(1, 3), new Func2<Throwable, Integer, Integer>() {
@Override
public Integer call(Throwable throwable, Integer integer) {
return integer;
}
}).flatMap(new Func1<Integer, Observable<?>>() {
@Override
public Observable<?> call(Integer integer) {
//timer 延迟执行的操作符
Log.i(TAG,"延迟"+integer+"秒");
return Observable.timer(integer, TimeUnit.SECONDS);
}
});
}
}).subscribe(new Subscriber<Integer>() {
@Override
public void onCompleted() {
Log.i(TAG,"onCompleted");
}
@Override
public void onError(Throwable e) {
Log.i(TAG,"onError:"+e.getMessage()) ;
}
@Override
public void onNext(Integer integer) {
Log.i(TAG,"onNext:"+integer) ;
}
}) ;
}
10.filter:
private void filter(){
//filter 按照规则过滤
Observable.just(0,1,2,3,4,5)
.filter(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
return integer < 2;
}
}).subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
Log.i(TAG,"call:"+integer) ;
}
});
}
详情可见:链接:https://pan.baidu.com/s/1omIDec_QK-nnCfwamBJV3A 密码:1i25