今天写一写Rxjava2的基本使用,Rxjava2虽然使用广泛,但已经不算是什么新框架了,从16年大火到现在已经好几年了。网上也有很多例子,总体来讲就像是官方文档的翻译,再具体项目中的实际案例很少,本系列将从浅入深逐步讲解,希望都有所收获。
本篇文章主要写Rxjava2最基本的使用,并且会有Kotlin与java两个版本的对照。
Rxjava,RxAndroid使用写作时的最新版本
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'
implementation 'io.reactivex.rxjava2:rxjava:2.2.9'
kotlin版简单入门
private fun tryRxjava2ByKotlin() {
val mObservable = Observable.create(ObservableOnSubscribe<String> {
it.onNext("北京")
it.onNext("生活")
it.onNext("精彩")
it.onComplete()
})
val mObserver = object : Observer<String>{
override fun onComplete() {
}
override fun onSubscribe(d: Disposable) {
}
override fun onNext(t: String) {
Log.d("MainActivity", t)
}
override fun onError(e: Throwable) {
}
}
mObservable.subscribe(mObserver)
}
其中mObservable可以进一步简化成以下形式,其它不变
val mObservable = Observable.create<String> {
it.onNext("北京")
it.onNext("生活")
it.onNext("精彩")
it.onComplete()
}
java版简单入门
private void tryRxjava2ByJava() {
Observable<String> mObservable = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
emitter.onNext("北京");
emitter.onNext("生活");
emitter.onNext("精彩");
emitter.onComplete();
}
});
Observer<String> mObserver = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
Log.d(TAG, "onSubscribe");
}
@Override
public void onNext(String s) {
Log.d(TAG, s);
}
@Override
public void onError(Throwable e) {
Log.d(TAG, "onError");
}
@Override
public void onComplete() {
Log.d(TAG, "onComplete");
}
};
mObservable.subscribe(mObserver);
kotlin实现Rxjava2简化用法
private fun tryEasyRxjava2ByKotlin() {
Observable.just("北京","生活", "美好")
.subscribe { t -> Log.d("MainActivity", t) }
}
也可以写成
private fun tryEasyRxjava2ByKotlin() {
Observable.just("北京", "生活", "精彩")
.subscribe { Log.d("MainActivity", it }
}
java实现Rxjava2简化用法
private void tryEasyRxjava2ByJava() {
Observable.just("北京","生活","美好")
.subscribe(new Consumer<String>() {
@Override
public void accept(String s) throws Exception {
Log.d("MainActivity", s);
}
});
}
看到这里是不是发现了什么,就是kotlin借助语法糖与Lambda表达式更简洁。以上例子中都是单独定义的变量,实际是可以写成链式调用的。
第一篇的简单使用到这里就结束了。