Rx java总结 一

内容参考 吴小龙rxjava,非常感谢龙同学给出这么优质的内容参考,由于他很早之前就已经编写,使用的java来演示的,本文都是以kotlin 的语法跟大家演示的,但是主体的内容未发生改变,再次感谢吴小龙

关于概念我就不再赘述... 网上太多了

这是我使用架包的版本


implementation 'io.reactivex.rxjava2:rxjava:2.2.10'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

观察者模式


RxJava的世界里,我们有四种角色:
Observable(被观察者)、Observer(观察者)
Subscriber(订阅者)、Subject
Observable和Subject是两个“生产”实体,Observer和Subscriber是两个“消费”实体。Observable 和 Observer 通过 subscribe() 方法实现订阅关系,从而 Observable 可以在需要的时候发出事件来通知 Observer。

回调方法


Subscribe方法用于将观察者连接到Observable,你的观察者需要实现以下方法:

  • onNext(T item)
    Observable调用这个方法发射数据,方法的参数就是Observable发射的数据,这个方法可能会被调用多次,取决于你的实现。

  • onError(Exception ex)
    当Observable遇到错误或者无法返回期望的数据时会调用这个方法,这个调用会终止Observable,后续不会再调用onNext和onCompleted,onError方法的参数是抛出的异常。

  • onComplete
    正常终止,如果没有遇到错误,Observable在最后一次调用onNext之后调用此方法。

创建操作 create

create(ObservableOnSubscribe { emitter ->
            emitter.onNext("Hello")
            emitter.onNext("Rxjava")
            emitter.onComplete()
        }).observeOn(Schedulers.io())
            .subscribeOn(AndroidSchedulers.mainThread())
            .subscribe({
                Log.d("RxjavaStu", it)
            }, {}, {
                Log.d("RxjavaStu", "onCompleted")
            })

打印的结果


com.example.rxjavastu D/RxjavaStu: Hello
com.example.rxjavastu D/RxjavaStu: Rxjava
com.example.rxjavastu D/RxjavaStu: onCompleted

just


just函数,它接受一至九个参数,返回一个按参数列表顺序发射这些数据的Observable。

just("Hello", "RxJava")
      .subscribe { 
          Log.d("RxjavaStu", it)
      }           

打印的结果


  com.example.rxjavastu D/RxjavaStu: Hello
  com.example.rxjavastu D/RxjavaStu: RxJava

变换操作 Map


操作符对原始Observable发射的每一项数据应用一个你选择的函数,然后返回一个发射这些结果。
如下,将原始Observable数据转化成大写,再发射:

just("Hello", "RxJava")
                .map {
                    it.toUpperCase()
                }
                .subscribe {
                    Log.d("RxjavaStu", it)
                }

打印的结果


com.example.rxjavastu D/RxjavaStu: HELLO
com.example.rxjavastu D/RxjavaStu: RXJAVA

fromArray

它和just有着相同的功能,都是接受数据源并创建一个被观察者对象。不同的是fromArray可以接受可变长参数对象(其实就是一个数组),它会把数组中的每个元素发射出来

fromArray("Hello", "RxJava")
                .subscribe {
                    Log.d("RxjavaStu", it)
                }

点击跳转下一章 总结二

你可能感兴趣的:(Rx java总结 一)