文章目录
1 Rxjava的使用流程
//服务员
ObservableOnSubscribe<String> observableOnSubscribe = new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
}
};
//顾客-被观察者
Observable observable = Observable.create(observableOnSubscribe);
//老板-观察者
Observer<String> observer = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
}
@Override
public void onNext(String s) {
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
//订阅
observable.subscribe(observer);
2 手写
实现了 create操作符
/**
* 服务员
* 跟老板打交道
* @param <T>
*/
public interface ObservableOnSubscribe<T> extends Action1<Observer<? super T>> {
}
public interface Action1<T> {
//通知顾客开始点餐 ? super T
void subscribe(T t);
}
/**
* 角色 顾客
*
* @param <T>服务:提供饭、面、馄饨、火锅...
*/
public class Observable<T> {
//服务员或者理解为发射器
ObservableOnSubscribe onSubscribe;
private Observable(ObservableOnSubscribe onSubscribe) {
this.onSubscribe = onSubscribe;
}
public static <T> Observable<T> create(ObservableOnSubscribe<T> onSubscribe) {
return new Observable<>(onSubscribe);
}
public void subscribe(Observer<? super T> subscribe) {
onSubscribe.subscribe(subscribe);
}
}
/**
* 老板 观察者
*/
public abstract class Observer<T> {
public abstract void onNext(T t);
public abstract void onError(Throwable e);
public abstract void onComplete();
}
使用:
public class MainActivity extends AppCompatActivity {
String TAG = "hongxue";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//服务员-发射器
ObservableOnSubscribe<String> observableOnSubscribe = new ObservableOnSubscribe<String>() {
@Override
public void subscribe(Observer<? super String> observer) {
observer.onNext("火锅");
}
};
//顾客-被观察者
Observable observable = Observable.create(observableOnSubscribe);
//老板-观察者
Observer<String> observer = new Observer<String>() {
@Override
public void onNext(String s) {
Log.i(TAG,s);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
}
};
//订阅
observable.subscribe(observer);
}
}
输出日志:
I/hongxue: 火锅