RxJava,又名ReactiveX Java,算是相當有名的一個編程庫,異步、線程交換等是它的特性之一,那麼等等就來提提rxjava中的Observable(被觀察者)與Observe(觀察者),及觀察者模式的部分,首先先進行添加rxjava的依賴。
implementation 'io.reactivex.rxjava2:rxjava:2.0.1'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'
//建立被觀察者
Observable observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception { //ObservableEmitter為信號發送器,此發送String型態資料,也可發送別的
//向觀察者(Observer)發送信號
e.onNext("This");
e.onNext("is");
e.onNext("a");
e.onComplete();
e.onNext("Observable");//已onComplete,不會發送此行信號
}
});
observer此有四個需要實現的method(onSubscribe、onNext、onError、onComplete),從被觀察者那邊接收信號。
//建立觀察者
Observer<String> observer = new Observer<String>() { //傳入String型態資料
@Override
public void onSubscribe(Disposable d) { //Disposable可用以解除訂閱(d.dispose())、或查詢是否解除訂閱(d.isDisposed())
}
@Override
public void onNext(String value) { //改為String型態
Log.d("observer","onNext:"+value);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.d("observer","onComplete!");
}
};
observable.subscribe(observer); //產生訂閱(subscribe)以結合,Observable->Observer
這大致上就算是觀察者模式了,Observable->產生訂閱->Observer,主要是有一個點要小心,如果發現Observable找不到create方法的話,有可能是import到android.xxx,是要import io.reactivex.xxx,這個點要留意,那麼接著先放上Log的結果和完整程式碼,明天就來使用rxjava線程實作post:
import androidx.appcompat.app.AppCompatActivity;
import io.reactivex.Observable;
import io.reactivex.ObservableEmitter;
import io.reactivex.ObservableOnSubscribe;
import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//建立被觀察者
Observable observable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> e) throws Exception { //發送String型態資料,也可發送別的
//向觀察者(Observer)發送信號
e.onNext("This");
e.onNext("is");
e.onNext("a");
e.onComplete();
e.onNext("Observable");//已onComplete,不會發送此行信號
}
});
//建立觀察者
Observer<String> observer = new Observer<String>() { //傳入String型態資料
@Override
public void onSubscribe(Disposable d) { //Disposable可用以解除訂閱(d.dispose())、或查詢是否解除訂閱(d.isDisposed())
}
@Override
public void onNext(String value) { //改為String型態
Log.d("observer","onNext:"+value);
}
@Override
public void onError(Throwable e) {
}
@Override
public void onComplete() {
Log.d("observer","onComplete!");
}
};
observable.subscribe(observer); //產生訂閱(subscribe)以結合,Observable->Observer
}
}