继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

RxJava(RxKotlin)、RxAndroid 简单使用

慕姐8265434
关注TA
已关注
手记 1309
粉丝 222
获赞 1065

RxJava(RxKotlin)、RxAndroid

ps:文章中涉及到的代码均使用 Kotlin 实现,即需要导入 RxKotlin,同时也涉及到了 RxAndroid 相关内容

导入方法:

  1. 在项目的 build.gradle 文件中添加 RxKotlin 的版本信息

buildscript {
    ext.rx_kotlin_version = '1.0.0'
    ext.rx_android_version = '1.2.1'}
  1. 在 module 的 build.gradle 文件中添加 RxKotlin 以及 RxAndroid 的依赖

dependencies {
    // RxKotlin RxAndroid
    implementation "io.reactivex:rxkotlin:$rx_kotlin_version"
    implementation "io.reactivex:rxandroid:$rx_android_version"}

1. 一些常用的网站

  1. RxJava文档

  2. RxJava中文文档

  3. RxJava经典资料


2. 观察者模式的四大要素

  1. Observable 被观察者

  2. Observer 观察者

  3. subscribe 订阅

  4. 事件


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
链接:https://www.jianshu.com/p/15f80333c19f


打开App,阅读手记
1人推荐
发表评论
随时随地看视频慕课网APP