RxJava(RxKotlin)、RxAndroid 簡單使用
RxJava(RxKotlin)、RxAndroid
ps:文章中涉及到的程式碼均使用 Kotlin 實現,即需要匯入 RxKotlin,同時也涉及到了 RxAndroid 相關內容
匯入方法:
在專案的 build.gradle 檔案中新增 RxKotlin 的版本資訊
buildscript { ext.rx_kotlin_version = '1.0.0' ext.rx_android_version = '1.2.1'}
在 module 的 build.gradle 檔案中新增 RxKotlin 以及 RxAndroid 的依賴
dependencies { // RxKotlin RxAndroid implementation "io.reactivex:rxkotlin:$rx_kotlin_version" implementation "io.reactivex:rxandroid:$rx_android_version"}
1. 一些常用的網站
2. 觀察者模式的四大要素
Observable
被觀察者Observer
觀察者subscribe
訂閱事件
3. 運算子
3.1 Creating 運算子
create justfromrange repeat interval defer empty / never timer start
create
運算子,直接建立一個 Subscriber 物件
Observable.create<String> { it.onNext("Hello Rx!") it.onCompleted() }.subscribe(object : Subscriber<String>() { override fun onNext(t: String) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> Hello Rx! onCompleted()
just
運算子將一系列物件逐個發射出去,注意集合物件將作為一個整體進行發射
Observable.just(1, 1.0, "String", true) .subscribe(object : Subscriber<Any>() { override fun onNext(t: Any) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } }) Observable.just(listOf(1, 2, 3, 4, 5)) .subscribe(object : Subscriber<List<Int>>() { override fun onNext(t: List<Int>) { t.forEach { println("onNext() --> $it") } } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> 1onNext() --> 1.0onNext() --> StringonNext() --> trueonCompleted() onNext() --> 1onNext() --> 2onNext() --> 3onNext() --> 4onNext() --> 5onCompleted()
from
運算子可以將集合中的元素逐個發射出去
Observable.from(listOf(5, 4, 3, 2, 1, 0)) .subscribe(object : Subscriber<Int>() { override fun onNext(t: Int) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> 5 onNext() --> 4 onNext() --> 3 onNext() --> 2 onNext() --> 1 onNext() --> 0 onCompleted()
range
在一定範圍內向觀察者發射整型資料,repeat
重複發射,預設重複無數次
Observable.range(1, 3) .repeat(2) .subscribe(object : Subscriber<Int>() { override fun onNext(t: Int) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> 1 onNext() --> 2 onNext() --> 3 onNext() --> 1 onNext() --> 2 onNext() --> 3 onCompleted()
interval
定時向觀察者傳送一個 Long 型別的數字(逐個疊加)
Observable.interval(2, 2, TimeUnit.SECONDS) .subscribe(object : Subscriber<Long>() { override fun onNext(t: Long) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> 0 onNext() --> 1 onNext() --> 2 onNext() --> 3 ...
defer
延遲建立 Observable 物件,只有在呼叫 subscribe() 方法時,才會建立 Observable 物件
var arg = "初始值"val observable = Observable.defer { Observable.just(arg) } arg = "再次賦值"observable.subscribe(object : Subscriber<String>() { override fun onNext(t: String) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> 再次賦值 onCompleted()
3.2 Transforming 運算子
mapflatMap groupBy buffer scan window
map
Observable.just(123, 234).map { "¥ $it" }.subscribe(object : Subscriber<String>() { override fun onNext(t: String) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> ¥ 123 onNext() --> ¥ 234 onCompleted()
flatMap
Observable.just(123, 234, 345) .flatMap { Observable.just("$ $it") }.subscribe(object : Subscriber<String>() { override fun onNext(t: String) { println("onNext() --> $t") } override fun onCompleted() { println("onCompleted()") } override fun onError(e: Throwable?) { println("onError()") } })
onNext() --> $ 123onNext() --> $ 234onNext() --> $ 345onCompleted()
groupBy
Observable.just(1, 2, 3, 4, 5, 6) .groupBy { it % 2 } .subscribe(object : Observer<GroupedObservable<Int, Int>> { override fun onError(e: Throwable?) { } override fun onNext(t: GroupedObservable<Int, Int>) { t.subscribe(object : Subscriber<Int>() { override fun onNext(r: Int) { println("group -> ${t.key}, value -> $r") } override fun onCompleted() { } override fun onError(e: Throwable?) { } }) } override fun onCompleted() { } })
group -> 1, value -> 1 group -> 0, value -> 2 group -> 1, value -> 3 group -> 0, value -> 4 group -> 1, value -> 5 group -> 0, value -> 6
buffer
Observable.range(0, 7) .buffer(3) .subscribe(object : Subscriber<List<Int>>() { override fun onNext(t: List<Int>) { println(t) } override fun onCompleted() { } override fun onError(e: Throwable?) { } })
[0, 1, 2] [3, 4, 5] [6]
作者:ChenME
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2471/viewspace-2817508/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- RxJava/RxAndroid/AutoDispose/RxBinding/RxBusRxJavaAndroid
- Retrofit2+RxJava 簡單使用RxJava
- RxAndroid使用初探;簡潔、優雅、高效Android
- Android使用Kotlin+Retrofit+Rxjava實現簡單的網路請求AndroidKotlinRxJava
- Android Rxjava :最簡單&全面背壓講解 (Flowable)AndroidRxJava
- [譯] RxJava JDBC 簡介RxJavaJDBC
- 拆 JakeWharton 系列之 RxAndroidAndroid
- BootStrapValidate 簡單使用boot
- GCDAsyncSocket 簡單使用GC
- gorm 簡單使用GoORM
- JPTabBar簡單使用tabBar
- Drozer簡單使用
- jq 簡單使用
- git簡單使用Git
- OpenFeign簡單使用
- LinqPad簡單使用
- Badger簡單使用
- 簡單使用 rocketmqMQ
- kvm簡單使用
- Quartz 簡單使用quartz
- kustomize簡單使用
- apijson簡單使用APIJSON
- Github 簡單使用Github
- mogilefs簡單使用
- 簡單使用autossh
- Kdevelop的簡單使用和簡單除錯dev除錯
- prometheus 簡單使用及簡單 middleware 開發Prometheus
- 大話RxJava:三、RxJava的中級使用方法RxJava
- RxJava 系列-3:使用 SubjectRxJava
- 2章 RxJava基本使用RxJava
- RxJava基礎使用(一)RxJava
- postman的簡單使用Postman
- Python Tkinter 簡單使用Python
- java 反射簡單使用Java反射
- python - Counter簡單使用Python
- OD的簡單使用
- RocketMQ的簡單使用MQ
- docker的簡單使用Docker