篇首语:本文由小编为大家整理,主要介绍了Android :RxJava学习笔记之Single相关的知识,希望对你有一定的参考价值。
特点:
使用说明:
订阅Single Observable 主要需要实现onSuccess ,OnError两个方法;他只会调用这两个方法中的其中一个,调用后订阅关系就会终止。
总结:
private void testSigngleOperator(){ Single.create(new Single.OnSubscribe<String>() { @Override public void call(SingleSubscriber<? super String> singleSubscriber) { singleSubscriber.onSuccess("success"); } }).subscribe(new SingleSubscriber<String>() { @Override public void onSuccess(String value) { System.out.print("onSuccess:"+value); } @Override public void onError(Throwable error) { System.out.print("onError:"+error); } }); }
输出的结果是:
onSuccess:success
Single也是可以使用onNext, onError, onCompleted这个回调的:
private void testSigngleOperator(){ Single.create(new Single.OnSubscribe<String>() { @Override public void call(SingleSubscriber<? super String> singleSubscriber) { singleSubscriber.onSuccess("success"); } }).subscribe(new Subscriber<String>() { @Override public void onCompleted() { System.out.println("onCompleted"); } @Override public void onError(Throwable e) { System.out.println("onError:"+e.getMessage()); } @Override public void onNext(String s) { System.out.println("onNext:"+s); } }); }
输出的结果是:
onNext:success
onCompleted
Single使用及示例
1、“just”,在RxJava中Single的just支持传入任意参数。
使用方法如:
Single.just(T value).subscribe();
public class MapTest { public static void main(String[] args) { MapTest mapTest = new MapTest(); mapTest.singleTest1(); } private int addValue(int a, int b) { return a + b; } private void singleTest1() { Single .just(addValue(1, 2)) .doOnError(throwable -> System.out.println(throwable.toString())) .subscribe(new Consumer<Integer>() { @Override public void accept(Integer integer) throws Exception { System.out.println("just: " + integer); } }); }}或者简化lambda表达式private void singleTest1() { Single .just(addValue(1, 2)) .subscribe( integer -> System.out.println("just: " + integer), throwable -> System.out.println(throwable.getMessage()) ); }
输出
just: 3
这里仅仅只是RxJava的开始,其中just()方法无论如何都只会在当前线程里执行。所以即使看上去有异步的过程,但其实这是个同步的过程!
2、create操作符
public class MapTest { public static void main(String[] args) { MapTest mapTest = new MapTest(); mapTest.singleTest(); } private int addValue(int a, int b) { return a + b; } private void singleTest() { Single.create((SingleOnSubscribe<Integer>) singleEmitter -> { singleEmitter.onSuccess(addValue(1, 2)); System.out.println("subscribe:" ); }) .doOnSuccess(integer -> System.out.println("doOnSuccess:" + integer)) .doOnError(throwable -> System.out.println(throwable.toString())) .doAfterSuccess(integer -> System.out.println("doAfterSuccess: ")) .subscribeOn(Schedulers.io()) .subscribe(integer -> System.out.println("onSuccess:" + integer) ); try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } }}
值得注意的是之前我们使用的just()是一种特殊的create(),它不能指定Schedulers。只能在当前线程中运行,而create()可以指定Schedulers实现异步处理。且just()不管是否被subscribe()订阅均会被调用,而create()如果不被订阅是不会被调用的。所以我们通常可以用just()传递简单参数,而用create()处理复杂异步逻辑。
3、map操作符
private void singleTest3() { Single .just(addValue(1, 2)) .map(new Function<Integer, String>() { @Override public String apply(Integer integer) throws Exception { return "test: " + integer; } }) .subscribe(new Consumer<String>() { @Override public void accept(String s) throws Exception { System.out.println(s); } } ); }简化 private void singleTest3() { Single .just(addValue(1, 2)) .map(integer -> "test: " + integer) .subscribe(s -> System.out.println(s) ); }
4、flatMap操作符
1、https://www.jianshu.com/p/6569b170fd4a
2、
以上是关于Android :RxJava学习笔记之Single的主要内容,如果未能解决你的问题,请参考以下文章