第一次写文章,还是要介绍一下为什么那么做?因为学的东西多了,乱七八糟的觉得写的很很好的文章保存在电脑上真的找不见啊!!!
通过http://blog.csdn.net/github_36617621/article/details/77113175 这个链接进行学习(以下的总结根据此链接,若不妥请联系我删除)
1.添加Gradle 配置
compile 'io.reactivex.rxjava2:rxjava:2.0.1'
compile 'io.reactivex.rxjava2:rxandroid:2.0.1'
2、小例子1(完整代码)
package com.edu.bunz.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
public class MainActivity extends AppCompatActivity {
private String TAG = "RxActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 建立连接
observable.subscribe(observer);
}
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onComplete();
}
});
// 创建一个下游 Observer
Observer<Integer> observer = new Observer<Integer>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "subscribe");
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "" + value);
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "error");
}
@Override
public void onComplete() {
Log.d(TAG, "complete");
}
};
}
3、小例子1的运行结果
简单笔记:
1、observable(被观察者)可以发送出无数过onNext,observer(观察者)也可以接收无数onNext
2、observable发完complete后,会继续发送complete之后的事件,然而observer只要接受到complete事件,就不会再接收obsevable发来的事件了。(其实我觉得上面不是很能说明这句话,所以我要在observable发送时间源的complete之后就一个onNext
此处不在展示全部代码,只展现关键代码(蓝色为添加部分)
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onNext(321);
emitter.onComplete();
emitter.onNext(921);
}
执行结果如下(蓝色是在
3、onError符合跟onComplete是一样的,替换2中的complete就好了。(同样来验证一下)
Observable<Integer> observable = Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onNext(321);
// emitter.onComplete();
emitter.onError(new Exception(("the day ... ")));
emitter.onNext(921);
}
});
观察者的onError 修改如下
@Override public void onError(Throwable e) { Log.d(TAG, "error" + e); }
执行结果
观察现象:observable(被观察者)发onError以后,observer(观察者)接收到以后就不再接收observable之后发来的onNext(921)
4、observable可以不发送oncomplete或者onError(验证如下)
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onNext(321);
// emitter.onComplete();
// emitter.onError(new Exception(("the day ... ")));
emitter.onNext(921);
}
执行结果如下:
5、onComplete和pnError必须唯一并且互斥!按我的理解是只能选择两者中的一个发一次。
注意:倘若违背,比如onComplete再发onError或者多发onError程序都会崩溃,连发onComplete或者onError再发onComplete程序正常运行。(所以对于5这个结论,我只能说不多写,是避免崩溃的最好办法)
(下面进行验证)
①
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onNext(321);
emitter.onComplete();
emitter.onError(new Exception(("the day ... ")));
emitter.onNext(921);
}
运行结果:程序崩溃
②
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onNext(321);
emitter.onComplete();
emitter.onComplete();
// emitter.onError(new Exception(("the day ... ")));
emitter.onNext(921);
}
执行结果:正常运行
③
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onNext(321);
// emitter.onComplete();
// emitter.onComplete();
emitter.onError(new Exception(("the day ... ")));
emitter.onError(new Exception(("the day ... ")));
emitter.onNext(921);
}
执行结果:程序奔溃
④
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
emitter.onNext(1);
emitter.onNext(2);
emitter.onNext(3);
emitter.onNext(321);
// emitter.onComplete();
// emitter.onError(new Exception(("the day ... ")));
emitter.onError(new Exception(("the day ... ")));
emitter.onComplete();
emitter.onNext(921);
}
执行结果:程序正常
3、例子2
完整实例代码
package com.edu.bunz.test;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
public class MainActivity extends AppCompatActivity {
private String TAG = "RxActivity";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
Log.d(TAG, "emit 1");
emitter.onNext(1);
Log.d(TAG, "emit 2");
emitter.onNext(2);
Log.d(TAG, "emit 3");
emitter.onNext(3);
Log.d(TAG, "emit complete");
emitter.onComplete();
Log.d(TAG, "emit 4");
emitter.onNext(4);
}
}).subscribe(new Observer<Integer>() {
private Disposable mDisposable;
private int i;
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "subscribe");
mDisposable = d;
}
@Override
public void onNext(Integer value) {
Log.d(TAG, "onNext: " + value);
i++;
if (i == 2) {
Log.d(TAG, "dispose");
mDisposable.dispose();
Log.d(TAG, "isDisposed : " + mDisposable.isDisposed());
}
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "error");
}
@Override
public void onComplete() {
Log.d(TAG, "complete");
}
});
}
}
主要讲解Disposable(adj.用完即可丢弃的)
作用:不接收observable发来的事件,但并不影响observable继续发送事件。
执行结果:
结论:
1.observer(观察者)中的onSubscribe是最先被调用的
2.调用dispose以后observable(被观察者)继续发送事件
3.onservable(被观察者)不应发送了onComplete而停止
之后还会深入讲解Disposble线程调度的问题
subscribe()有多个重载的方法
public final Disposable subscribe() {} //observer不关心任何事件,随observable发
public final Disposable subscribe(Consumer<? super T> onNext) {} //只关心onNext事件,例子如下
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete) {}
public final Disposable subscribe(Consumer<? super T> onNext, Consumer<? super Throwable> onError, Action onComplete, Consumer<? super Disposable> onSubscribe) {}
public final void subscribe(Observer<? super T> observer) {} (之前使用过)
Observable.create(new ObservableOnSubscribe<Integer>() {
@Override
public void subscribe(ObservableEmitter<Integer> emitter) throws Exception {
Log.d(TAG, "emit 1");
emitter.onNext(1);
Log.d(TAG, "emit 2");
emitter.onNext(2);
Log.d(TAG, "emit 3");
emitter.onNext(3);
Log.d(TAG, "emit complete");
emitter.onComplete();
Log.d(TAG, "emit 4");
emitter.onNext(4);
}
}).subscribe(new Consumer<Integer>() {
@Override
public void accept(Integer integer) throws Exception {
Log.d(TAG, "onNext: " + integer);
}
});
总结看学习這原文的原链接!