美文网首页RxJava
RxJava<第一篇>:基本使用

RxJava<第一篇>:基本使用

作者: NoBugException | 来源:发表于2019-03-12 15:53 被阅读14次

声明

本文主要针对RxJava的使用,不会对概念做过多的讲解。

1.作用

RxJava的目的是异步。

2.前提

学习RxJava之前最好对观察者设计模式的概念有所了解,下面是本人整理的博客
Android之观察者设计模式

观察者设计模式的使用步骤是:

  • 创建被观察者
  • 创建观察者
  • 观察者和被观察者之间的绑定

这里需要再次提醒,想要深入了解Rxjava必须知道观察者设计模式,必须彻底理解观察者和被观察者的概念。

3.RxJava的引用

implementation 'io.reactivex.rxjava2:rxjava:2.1.3'
implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

4.基本代码

  • 创建被观察者

      //创建一个被观察者
      Observable<String> observable = Observable.create(new ObservableOnSubscribe<String>() {
          @Override
          public void subscribe(ObservableEmitter<String> emitter) throws Exception {
              emitter.onNext("A");
              emitter.onNext("B");
              emitter.onNext("C");
              emitter.onComplete();
          }
      });
    

分析以上代码
(1)Observable是rxjava封装的被观察者抽象类;
(2)create方法是创建一个被观察者实例;
(3)注意以下泛型,泛型的类型决定事件传递数据的类型;
(4)emitter是事件发射器,主要负责发送三种事件onNext、onError、onComplete;

  • 创建观察者

      //创建观察者
      Observer<String> observer = new Observer<String>(){
    
          @Override
          public void onSubscribe(Disposable d) {
              System.out.println("开始采用subscribe连接!");
          }
    
          @Override
          public void onNext(String value) {
              System.out.println("对Next事件作出响应:"+value);
          }
    
          @Override
          public void onError(Throwable e) {
              System.out.println("对Error事件作出响应!");
          }
    
          @Override
          public void onComplete() {
              System.out.println("事件执行完毕!");
          }
      };
    

分析以上代码:
(1)onSubscribe:当被观察者和观察者关联时立刻执行,其中它的形参Disposable中的dispose()可以立刻解除观察者和被观察者的订阅(关联)关系;
(2)onNext:当一个任务执行完毕时再执行另一个任务;
(3)onError:当一个任务报错是立刻中断当前任务和后续任务的执行;
(4)onComplete:当所有任务执行完毕的时候执行;

  • 让观察者和被观察者产生关联

     //订阅
     observable.subscribe(observer);
    

当产生关联(订阅)时,将立刻执行观察者的onSubscribe回调方法,然后再执行被观察者的subscribe回调。

5.几种创建被观察者的方式

方式1:

    //创建一个被观察者
    observable = Observable.create(new ObservableOnSubscribe<String>() {
        @Override
        public void subscribe(ObservableEmitter<String> emitter) throws Exception {
            emitter.onNext("A");
            emitter.onNext("B");
            emitter.onNext("C");
            emitter.onComplete();
        }
    });

方式2:

    //创建一个被观察者
    Observable observable = Observable.fromArray("A", "B");

相当于方式1的

        emitter.onNext("A");
        emitter.onNext("B");

方式3:

    //创建一个被观察者
    Observable observable = Observable.just("A", "B");

相当于方式1的

        emitter.onNext("A");
        emitter.onNext("B");

方式4:

    List<String> list = new ArrayList<>();
    list.add("A");
    list.add("B");
    //创建一个被观察者
    observable = Observable.fromIterable(list);

方式5:(线程有回调时:Callable )

    Callable callable = new CallbaleIml();
    new Thread(new FutureTask<String>(callable)).start();
    //创建一个被观察者
    observable = Observable.fromCallable(callable);
public class CallbaleIml implements Callable {
    @Override
    public Object call() throws Exception {
        return "call A";
    }
}

方式6:(线程有回调时:Future )

public class FutureIml implements Future {
    @Override
    public boolean cancel(boolean mayInterruptIfRunning) {
        return false;
    }

    @Override
    public boolean isCancelled() {
        return false;
    }

    @Override
    public boolean isDone() {
        return false;
    }

    @Override
    public Object get() throws InterruptedException, ExecutionException {
        return "AA";
    }

    @Override
    public Object get(long timeout, @NonNull TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException {
        return "BB";
    }
}

当没有延迟时,返回“AA”, 当有延迟时返回“BB”

    Future future = new FutureIml();
    //创建一个被观察者(默认)
    observable = Observable.fromFuture(future);
    //或者
    //创建一个被观察者(有延迟)
    observable = Observable.fromFuture(future, 1000, TimeUnit.MILLISECONDS);

方式7:

public class PublisherIml implements Publisher {
    @Override
    public void subscribe(Subscriber s) {
        s.onNext("A");
        s.onNext("B");
        s.onNext("C");
        s.onComplete();
    }
}
    Publisher publisher = new PublisherIml();

方式8:

    //创建一个被观察者
    observable = Observable.fromPublisher(publisher);

方式9:

public class CallbaleIml implements Callable {
    @Override
    public ObservableSource call() throws Exception {
        return Observable.just("A");
    }
}
    Callable callable = new CallbaleIml();
    observable = Observable.defer(callable);

创建被观察者还有其他方式,在后续的文章中会给出。

相关文章

  • RxJava<第一篇>:基本使用

    声明 本文主要针对RxJava的使用,不会对概念做过多的讲解。 1.作用 RxJava的目的是异步。 2.前提 学...

  • 腾讯GT在iOS上的简单实践

    本文简单介绍腾讯GT在iOS上的使用。 1)下载GT.framework,下载地址为:http://gt.tenc...

  • FILTER

    FILTER 基本知识 内表过滤 简单模式gt_value_tab = FILTER #( gt_messages...

  • 2. 获取流畅度

    使用腾讯GT工具 使用GT获取流畅度和对数据的思考 自己使用代码获取路畅度 代码地址 使用方法在Applicat...

  • Retrofit--->基本使用

    引言 这里只是一个官方的关于Retrofit简单使用的代码,具体关于其的深奥分析,可以看我贴出的参考文章。 1.定...

  • MongoDB 条件操作符

    1.比较操作符: 基本语法对象的键值对为:{key:num}而使用条件操作符则为:{key:{$gt:num}} ...

  • 全球博览基本知识(收藏)

    全球博览基本知识? GT,GD,GDS,GX的关系? ❓GT阅读新闻(阅读包)产生的收益,可交易变现,可置换购物,...

  • GT使用说明

    GT使用说明 一、概况 此版本GT支持Android 5.x~8.x所有机型,手机无需root; 二、如何引入SD...

  • 集合<List>基本使用

    常用方法 增加数据 1.add()2.add(index,objc)3.addAll()4.addAll(inde...

  • Recyclerview基本使用<1>

    想写几篇关于Recyclerview的文章,对Recyclerview做一个系统的总结。不过万事起于忽微,来先看看...

网友评论

    本文标题:RxJava<第一篇>:基本使用

    本文链接:https://www.haomeiwen.com/subject/hepwyqtx.html