RxJava创建操作符

1、just操作符: 创建一个被观察者,并发送事件,发送的事件不可以超过10个以上。
方法预览public static <T> Observable<T> just(T item) public static <T> Observable<T> just(T item1, T item2, T item3, T item4, T item5, T item6, T item7, T item8, T item9, T item10)

怎么使用?

	Observable.just(1, 2, 3)
	     .subscribe(new Observer < Integer > () {
		   @Override
		    public void onSubscribe(Disposable d) {
		        Log.d(TAG, "=================onSubscribe");
		    }
		
		    @Override
		    public void onNext(Integer integer) {
		        Log.d(TAG, "=================onNext " + integer);
		    }
		
		    @Override
		    public void onError(Throwable e) {
		        Log.d(TAG, "=================onError ");
		    }
		
		    @Override
		    public void onComplete() {
		        Log.d(TAG, "=================onComplete ");
		    }
	});

输出结果

	=================onSubscribe
	=================onNext 1
	=================onNext 2
	=================onNext 3
	=================onNext 4
	=================onComplete 

2、from、fromArray:和just类似,只不过fromArray可以传入多于10个变量,并且传入一个数组

Integer array[] = {1, 2, 3, 4};
Observable.fromArray(array)
 .subscribe(new Observer < Integer > () {
    @Override
    public void onSubscribe(Disposable d) {
        Log.d(TAG, "=================onSubscribe");
    }

    @Override
    public void onNext(Integer integer) {
        Log.d(TAG, "=================onNext " + integer);
    }

    @Override
    public void onError(Throwable e) {
        Log.d(TAG, "=================onError ");
    }

    @Override
    public void onComplete() {
        Log.d(TAG, "=================onComplete ");
    }
});

输出结果

=================onSubscribe
=================onNext 1
=================onNext 2
=================onNext 3
=================onNext 4
=================onComplete 
  • 3、fromCallable():这里Callable是concurrent中的Callable,与Runnable用法基本一致,只是它会返回一个结果值,这个结果值会发送给观察者。
	// i 要定义为成员变量
	Integer i = 100;
	        
	Observable<Integer> observable = Observable.defer(new Callable<ObservableSource<? extends Integer>>() {
	    @Override
	    public ObservableSource<? extends Integer> call() throws Exception {
	        return Observable.just(i);
	    }
	});
	
	i = 200;
	
	Observer observer = new Observer<Integer>() {
	    @Override
	    public void onSubscribe(Disposable d) {
	
	    }
	
	    @Override
	    public void onNext(Integer integer) {
	        Log.d(TAG, "================onNext " + integer);
	    }
	
	    @Override
	    public void onError(Throwable e) {
	
	    }
	
	    @Override
	    public void onComplete() {
	
	    }
	};
	
	observable.subscribe(observer);
	
	i = 300;
	
	observable.subscribe(observer);

输出结果

 ================accept 1

4、fromFuture():参数Future,就是Java中的Future,Future是增加了cancel等方法操作的Callable,它可以通过get()方法来获取Callable返回的值。

	FutureTask < String > futureTask = new FutureTask < > (new Callable < String > ({
	    @Override
	    public String call() throws Exception {
	        Log.d(TAG, "CallableDemo is Running");
	        return "返回结果";
	    }
	});
	
	Observable.fromFuture(futureTask)
	    .doOnSubscribe(new Consumer < Disposable > () {
	    @Override
	    public void accept(Disposable disposable) throws Exception {
	        futureTask.run();
	    }
	})
	.subscribe(new Consumer < String > () {
	    @Override
	    public void accept(String s) throws Exception {
	        Log.d(TAG, "================accept " + s);
	    }
	});

打印结果:

FutureTask < String > futureTask = new FutureTask < > (new Callable < String > () {
    @Override
    public String call() throws Exception {
        Log.d(TAG, "CallableDemo is Running");
        return "返回结果";
    }
});

Observable.fromFuture(futureTask)
    .doOnSubscribe(new Consumer < Disposable > () {
    @Override
    public void accept(Disposable disposable) throws Exception {
        futureTask.run();
    }
})
.subscribe(new Consumer < String > () {
    @Override
    public void accept(String s) throws Exception {
        Log.d(TAG, "================accept " + s);
    }
});

输出结果

================accept 返回结果

5、fromIterable : 直接发送一个List集合数据给观察者。

List<Integer> list = new ArrayList<>();
list.add(0);
list.add(1);
list.add(2);
list.add(3);
Observable.fromIterable(list)
.subscribe(new Observer < Integer > () {
  @Override
  public void onSubscribe(Disposable d) {
      Log.d(TAG, "=================onSubscribe");
  }

  @Override
  public void onNext(Integer integer) {
      Log.d(TAG, "=================onNext " + integer);
  }

  @Override
  public void onError(Throwable e) {
      Log.d(TAG, "=================onError ");
  }

  @Override
  public void onComplete() {
      Log.d(TAG, "=================onComplete ");
  }
});

打印结果如下:

=================onSubscribe
=================onNext 0
=================onNext 1
=================onNext 2
=================onNext 3
=================onComplete 

6、defer():直到被观察者被订阅后才会创建被观察者

// i 要定义为成员变量
Integer i = 100;
	Observable<Integer> observable = Observable.defer(new Callable<ObservableSource<? extends Integer>>() {
	    @Override
	    public ObservableSource<? extends Integer> call() throws Exception {
	        return Observable.just(i);
	    }
	});

 i = 200;

Observer observer = new Observer<Integer>() {
	    @Override
	    public void onSubscribe(Disposable d) {
	
	    }
	
	    @Override
	    public void onNext(Integer integer) {
	        Log.d(TAG, "================onNext " + integer);
	    }
	
	    @Override
	    public void onError(Throwable e) {
	
	    }
	
	    @Override
	    public void onComplete() {
	
	    }
  };

 observable.subscribe(observer);

   i = 300;

  observable.subscribe(observer);

因为defer只有观察者订阅的时候才会创建新的被观察者,所以每订阅一次就会打印一次,并且都是打印i最新的值。

7、time(): 当到指定的时间发送一个值给观察者。

Observable.timer(2, TimeUnit.SECONDS)
.subscribe(new Observer < Long > () {
    @Override
    public void onSubscribe(Disposable d) {

    }

    @Override
    public void onNext(Long aLong) {
        Log.d(TAG, "===============onNext " + aLong);
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
});

输出结果

===============onNext 0

8、interval():定时任务,每隔一段时间就发送一个事件。

Observable.interval(4, TimeUnit.SECONDS)
.subscribe(new Observer < Long > () {
    @Override
    public void onSubscribe(Disposable d) {
        Log.d(TAG, "==============onSubscribe ");
    }

    @Override
    public void onNext(Long aLong) {
        Log.d(TAG, "==============onNext " + aLong);
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
});

输出结果

==============onSubscribe 
==============onNext 0
==============onNext 1
==============onNext 2
==============onNext 3
==============onNext 4
==============onNext 5

每隔4秒发出一个数字递增1的事件,interval第三个参数的initialDelay参数,这个参数的意思就是OnSubscribe回调之后,再次回调onNext的间隔时间

9、intervalRange():可以指定发送时间的开始值和数量其他与interval()一样。

方法签名
public static Observable<Long> intervalRange(long start, long count, long initialDelay, long period, TimeUnit unit)
public static Observable<Long> intervalRange(long start, long count, long initialDelay, long period, TimeUnit unit, Scheduler scheduler)

Observable.intervalRange(2, 5, 2, 1, TimeUnit.SECONDS)
.subscribe(new Observer < Long > () {
    @Override
    public void onSubscribe(Disposable d) {
        Log.d(TAG, "==============onSubscribe ");
    }

    @Override
    public void onNext(Long aLong) {
        Log.d(TAG, "==============onNext " + aLong);
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
});

输出结果

==============onSubscribe 
==============onNext 2
==============onNext 3
==============onNext 4
==============onNext 5
==============onNext 6

10、range():同时发送一定范围的事件序列。

方法预览
public static Observable<Integer> range(final int start, final int count)

Observable.range(2, 5)
.subscribe(new Observer < Integer > () {
    @Override
    public void onSubscribe(Disposable d) {
        Log.d(TAG, "==============onSubscribe ");
    }

    @Override
    public void onNext(Integer aLong) {
        Log.d(TAG, "==============onNext " + aLong);
    }

    @Override
    public void onError(Throwable e) {

    }

    @Override
    public void onComplete() {

    }
});

输出结果

==============onSubscribe 
==============onNext 2
==============onNext 3
==============onNext 4
==============onNext 5
==============onNext 6

11、rangeLong():与range一样,只是类型为Long

12、empty(): 直接发送OnComplete()事件。
13、never():不发送任何事件
14、error:发送OnError事件

Observable.empty()
.subscribe(new Observer < Object > () {

    @Override
    public void onSubscribe(Disposable d) {
        Log.d(TAG, "==================onSubscribe");
    }

    @Override
    public void onNext(Object o) {
        Log.d(TAG, "==================onNext");
    }

    @Override
    public void onError(Throwable e) {
        Log.d(TAG, "==================onError " + e);
    }

    @Override
    public void onComplete() {
        Log.d(TAG, "==================onComplete");
    }
});

打印结果

==================onSubscribe
==================onComplete

换成never()的打印结果:

==================onSubscribe

换成error的打印结果

==================onSubscribe
==================onError java.lang.NullPointerException
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值