我是一个小白,落伍的小白,现在才开始RxJava!
/**
* Rxjava原理是订阅发布模式:
* 通过subscribe()方法把Observable(被观察者)和Observer(观察者/Subscriber)实现订阅关系
*/
public class RxJavaActivity extends AppCompatActivity implements View.OnClickListener {
private TextView rxjava_tv;
private static final String TAG = "LDM";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_rx_java);
rxjava_tv = (TextView) findViewById(R.id.rxjava_tv);
findViewById(R.id.rxjava_btn).setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.rxjava_btn:
//RxJava使用基本步骤
//第一步:创建Observable
Observable<String> observable = createObservable;
//第二步:创建Observer
Observer<String> observer = createObserver;
//通过subcribe实现订阅关系
observable.subscribe(observer);
//或者使用另外一种写法
// otherStyle();
break;
}
}
/**
* Observable可以发送任意数量的消息(包括空消息),当消息被成功处理或者出错时,流程结束。 Observable会调用它的每个Subscriber的Subscriber.onNext()函数,并最终以Subscriber.onComplete()或者Subscriber.onError()结束。
*/
private Observable<String> createObservable = Observable.create(new ObservableOnSubscribe<String>() {
/**
* ObservableEmitter: Emitter是发射器的意思,它可以发出三种类型的事件:
* 通过调用emitter的onNext(T value)、onComplete()和onError(Throwable error)就可以分别发出:
* next事件、complete事件和error事件。
* @param e
* @throws Exception
*/
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
//执行onNext()方法,Observer中对应执行onNext()方法
e.onNext("我的第一次RxJava学习");
e.onComplete();
}
});
private Observer<String> createObserver = new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
Log.e(TAG, "onSubscribe: ");
}
@Override
public void onNext(@NonNull String s) {
Log.e(TAG, "onNext:");
rxjava_tv.append(s);
rxjava_tv.append("\n");
}
@Override
public void onError(@NonNull Throwable e) {
Log.e(TAG, "onError: ");
}
@Override
public void onComplete() {
Log.e(TAG, "onComplete: ");
}
};
/**
* @description 换一种写法实现整个流程
* @author ldm
* @time 2017/4/27 11:36
*/
private void otherStyle() {
Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(@NonNull ObservableEmitter<String> e) throws Exception {
e.onNext("链式写法学习RxJava");
e.onNext("再调用一次onNext");
}
}).subscribe(new Observer<String>() {
@Override
public void onSubscribe(@NonNull Disposable d) {
}
@Override
public void onNext(@NonNull String s) {
rxjava_tv.append(s);
rxjava_tv.append("\n");
}
@Override
public void onError(@NonNull Throwable e) {
}
@Override
public void onComplete() {
}
});
}
}