今天主要学习了一下RXJava;
接下来说一下这个RXjava:
有些时候可能不知道RXjava是什么 那他又有什么优势,优势其实用一个词就可以概括,那就是简洁,而RxAndroid是RxJava在Android上的一个扩展,Retorfit、OkHttp组合起来使用,而且用它似乎可以完全替代eventBus和OTTO。
一、RXjava 可以用来干什么:
RX(Reactive Extensions)是一个库,用来处理事件和异步任务,很简单实白的说RxJava就是处理异步的一个库,最基本是基于观察者模式来实现的,而RXjava它完全可以替代EventBus和OTTO。
二、RXjava的优势:
最简单的一个词:简洁。而且当业务越繁琐越复杂时这一点就越显出优势——它能够保持简洁。
Observable、Subscribers
简单的来说一下其实就是我们都知道的观察者模式,订阅模式而已,
1. Observable事件源,被观察者。
2. Subcriblers 观察者,事件订阅者
3. Observer 同Subcribler差不多
4. subscribe() 方法,绑定Observable与Subcribler或者Observabler
三、Observable的创建:
public final static <T> Observable<T> create(OnSubscribe<T> f) {
return new Observable<T>(hook.onCreate(f));
}
Observable<String> mObservable = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
}
});
四、Subscriber的创建
Subscriber<String> mTestSubscriber = new Subscriber<String>() {
@Override
public void onCompleted() {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
}
};
五、操作符
//flatMap操作符
public static void flatMapOpretor() {
User user = new User();
user.userName = "zhangsan";
user.addresss = new ArrayList<>();
User.Address address1 = new User.Address();
User.Address address1 = new User.Address();
address1.street = "河北路";
address1.city = "天津";
user.addresss.add(address1);
Observable.just(user)
.flatMap(new Function<User, ObservableSource<User.Address>>() {
@Override
public ObservableSource<User.Address> apply(User user) throws Exception {
return Observable.fromIterable(user.addresss);
}
}) .subscribe(new Consumer<User.Address>() {
@Override
public void accept(User.Address address) throws Exception {
System.out.println("地址是:" + address.street);
}
});
}
//distinct过滤掉重复的数据项
public static void distinctOperator() {
Observable.just("A","A","B") .distinct().subscribe(new Consumer<String>() {
@Override
public void accept(String integer) throws Exception {
System.out.println("next :" + integer);
}
});
}
//elementAt 只发射第n项数据
public static void elementAtOperator() {
Observable.just(1,2,3,4,5,6,7) .elementAt(2) .subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
System.out.println("next:" + integer);
}
});
}