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
}
}
>>: [Day22] Vue 3 单元测试 (Unit Testing) - Testing Vuex
前言 fctix 这个输入法平台是直接就可从套件管理程序安装呒虾米输入法,我翻了一下资料,fcitx...
一、前言 上一篇文章介绍了 VSCode 好用的快捷键,此篇开始介绍其他扩充之实用功能罗。没意外...
前言 该系列是为了让看过Vue官方文件或学过Vue但是却不知道怎麽下手去重构现在有的网站而去规画的系...
角色情境 小华一边讲解、一边指导小明如何使用 GitHub 建立远端数据库。 小明认真地遵循小华的指...
学习进度 第三周的课程内容小考与检讨 游戏专题 JFrame、JPannel、JKernel 游戏主...