要想学会Rxjava,我们得来看它的原理--观察者模式,什么是观察者模式,它分为三个部分 1.观察者(Observer),2被观察者(Observable),3.事件,这里我给大家举个的例子
比如说我们开灯这个事情,其中这个按钮就是被观察者,而灯就是观察者,也就是说灯亮与不亮 要靠按钮的变化,只要按钮改变状态了灯也会相应改变,这就是典型的观察者模式 大家应该有点意识了。下面给一个小demo加深理解,代码很简单我就不废话,直接上代码:
//观察者一
public class G1 implements listener{
public void onlisten(){
System.out.println("G1知道了");
}
}
//观察者二
public class G2 implements listener{
public void onlisten(){
System.out.println("G2知道了");
}
}
//观察者三
public class G3 implements listener{
public void onlisten(){
System.out.println("G3知道了");
}
}
//定义一接口,用来改变观察者
public interface listener {
void onlisten();
}
//被观察者
public class Observers {
private List<listener> listenerList = new ArrayList<>();
//改变了通知观察者
public void onchange(){
for (int i = 0; i < listenerList.size(); i++) {
listenerList.get(i).onlisten();
}
}
public void addobs(listener list){
listenerList.add(list);
}
public static void main(String[] args) {
//直接可以main函数里面增减观察者
G1 g1 = new G1();
G2 g2 = new G2();
G3 g3 = new G3();
Observers observers = new Observers();
observers.addobs(g1);
observers.addobs(g2);
observers.addobs(g3);
observers.onchange();
}
}
好了,现在来看下Rxjava的基本API,也是以demo直接上代码:
先引包:
compile 'io.reactivex:rxjava:1.1.8'
compile 'io.reactivex:rxandroid:1.2.1'
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
public static void main(String[] args) {
/* //观察者
Observer<String> gcz = new Observer<String>() {
@Override
//接收消息完毕
public void onCompleted() {
System.out.println("OK");
System.out.println("onCompleted"+Thread.currentThread().getName());
}
//接收消息出错
@Override
public void onError(Throwable e) {
}
//接收到的数据
@Override
public void onNext(String s) {
System.out.println(s);
System.out.println("onNext"+Thread.currentThread().getName());
}
};
//被观察者
Observable<String> bgcz = Observable.create(new Observable.OnSubscribe<String>(){
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("勒布朗詹姆斯");
subscriber.onNext("科比");
subscriber.onCompleted();
System.out.println("call"+Thread.currentThread().getName());
}
});
//订阅
bgcz.subscribe(gcz);*/
//标准写法(链式编程)
/*Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("科比");
subscriber.onNext("詹姆斯");
subscriber.onCompleted();
}
}).subscribe(new Observer<String>() {
@Override
public void onCompleted() {
System.out.println("OK");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
System.out.println("------->"+s);
}
});*/
/* Subscription subscribe = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("科比");
subscriber.onNext("詹姆斯");
subscriber.onCompleted();
}
}).subscribe(new Subscriber<String>() {
//在订阅之前就开始执行,用于一些准备工作
@Override
public void onStart() {
super.onStart();
System.out.println("我先运行了");
}
@Override
public void onCompleted() {
System.out.println("OK");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(String s) {
System.out.println("------->"+s);
}
});
//取消订阅
//subscribe.unsubscribe();*/
/* Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("科比");
subscriber.onNext("詹姆斯");
subscriber.onCompleted();
}
}).subscribe(new Action1<String>() {
@Override
//相当于onNext(String s)方法
public void call(String s) {
System.out.println("------->" + s);
}
}, new Action1<Throwable>() {
@Override
//相当于onError(Throwable e)方法
public void call(Throwable throwable) {
}
}, new Action0() {
@Override
//相当于onCompleted()方法
public void call() {
System.out.println("OK");
}
});*/
/*Subscription subscribe = Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onNext("科比");
subscriber.onCompleted();
}
}).subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
}, new Action0() {
@Override
public void call() {
System.out.println("ok");
}
});*/
//取消订阅
//subscribe.unsubscribe();
//just()依次发送消息
/*Observable.just("科比","詹姆斯","欧文")
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});*/
/*//from()发送一个集合等。。
ArrayList<String> list = new ArrayList<>();
for (int i = 0; i < 4; i++) {
list.add("科比"+i);
}
Observable.from(list)
.subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
});*/
//empty():发送一个空消息
/* Observable.empty().
subscribe(new Observer () {
@Override
public void onCompleted() {
System.out.println("ok");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Object s) {
}
*/
//defer();区分两个不同时间段的返回出的被订阅者
/*Observable<Long> defer = Observable.defer(new Func0<Observable<Long>>() {
@Override
public Observable<Long> call() {
return Observable.just(System.currentTimeMillis());
}
});
defer.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
System.out.println(aLong);
}
});
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
defer.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
System.out.println(aLong);
}
});*/
//range()方法就是从第一个参数开始数按升序一直数到第(第二个参数)个为止期间依次发送出去
/* Observable.range(1,10)
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
System.out.println(integer);
}
});*/
//timer():延迟时间发送
/*System.out.println("开始发生");
Observable.timer(2, TimeUnit.SECONDS)
.subscribe(new Subscriber<Long>() {
@Override
public void onCompleted() {
System.out.println("ok");
}
@Override
public void onError(Throwable e) {
}
@Override
public void onNext(Long aLong) {
}
});
while (true);*/
/*Observable.interval(5,1,TimeUnit.SECONDS)
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
System.out.println(aLong);
}
});
while (true);*/
//过滤
/* Observable.range(0,10).filter(new Func1<Integer, Boolean>() {
@Override
public Boolean call(Integer integer) {
return integer % 2 == 0;
}
}).subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
System.out.println(integer);
}
});*/
/* Integer[] integers = {2,1,5,6,4,1,6,2,3,0,0,3,2,3,2,0};
Observable.from(integers)
//.distinct()
.distinctUntilChanged()
.subscribe(new Action1<Integer>() {
@Override
public void call(Integer integer) {
System.out.println(integer);
}
});*/
/* Observable.create(new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> subscriber) {
subscriber.onCompleted();
}
}).ignoreElements().subscribe(new Action1<String>() {
@Override
public void call(String s) {
System.out.println(s);
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
}
}, new Action0() {
@Override
public void call() {
System.out.println("ok");
}
});*/
/*Observable.interval(1,TimeUnit.SECONDS)
// .take(5,TimeUnit.SECONDS)
.skip(5,TimeUnit.SECONDS)
.subscribe(new Action1<Long>() {
@Override
public void call(Long aLong) {
System.out.println(aLong);
}
});
while (true);*/
}
}
好了!先说这些吧