RxJava简单使用

RxJava是square公司开发的一个用户进行异步操作的类库。功能非常强大,以下介绍几种简单的使用。

1、普通异步操作

Flowable.just("nil").subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                Log.i("TAG","name is "+s);
            }
        });

这是rxjava最简单的应用,是将输入的字符串输出,这里注意的是subscribe方法是定义消费者的意思,RXjava是基于观察者模式实现异步操作的,subscribe定义消费者,在消费者中进行对应操作。注意subscribe是订阅的,按理说应该是消费者订阅被观察者,这里只是为了这种链式调用所以把api故意写为这样,大家无需理会

2、线程切换

Flowable.just("nil")
        .subscribeOn(Schedulers.io())
        .observeOn(Schedulers.newThread())
        .subscribe(new Consumer<String>() {
    @Override
    public void accept(String s) throws Throwable {
        Log.i("TAG","name is "+s);
    }
});

通过subscribeOn指订阅现成即执行操作的现成,observeOn为显影线程,即Consumer中实现方法的执行的线程。Schedulers中的方法这里不做枚举了,最主要的就是这两个,如果集成了rxAndroid,还会有个AndroidSchedulers.mainThread(),一般是用在observeOn中,用户主线程更新UI等

3、类型转换

rxJava最好用,最两点的功能,就是能够异步就输入类型进行转换处理,并在消费者出进行回调处理

  Boy boy = new Boy();
        boy.setAge("23");
        boy.setName("john");
        boy.setHigh("180cm");

        Flowable.just(boy).map(new Function<Boy, String>() {
            @Override
            public String apply(Boy boy) throws Throwable {
                return boy.getHigh();
            }
        }).subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                Log.i("Tag","high is : "+s);
            }
        });

上述代码中被观察对象输入是个boy,但是在观察者消费的方法中,所检测的参数却是一个string 字符串(身高)。

4、flatMap

 Boy boy2 = new Boy();
        boy2.setAge("24");
        boy2.setName("john2");
        boy2.setHigh("182cm");

        Boy[] boys = new Boy[]{boy,boy2};
        Consumer boyConsumer = new Consumer<Boy>() {
            @Override
            public void accept(Boy o) throws Throwable {
                Log.i("TAG","high is :"+o.getHigh());
            }
        };

        Observable.fromArray(boys).flatMap(new Function<Boy, ObservableSource<?>>() {
            @Override
            public ObservableSource<?> apply(Boy boy) throws Throwable {
                return Observable.just(boy);
            }
        }).subscribe(boyConsumer);

当要同事注册多个被观察者,就需要用flatmap,flatmap会将所有的被观察者放入一个数列中依次进行订阅。

以上只是为了对rxjava的应用进行简单阐述,觉得例子比较简单,所以其实不用rxjava可能会更简单,但是这里只是简单阐述,几个常用的方法,遇到需要异步场景时,脑中能够考虑rxjava的应用就达到目的了。

rxjava还提供一些其他的小功能,比如延时执行,定时执行等这里就不再赘述了,有兴趣的同学可以自己看一下api。

延时五秒执行

 Flowable.just("nil")
                .delay(5, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.newThread())
                .subscribe(new Consumer<String>() {
            @Override
            public void accept(String s) throws Throwable {
                Log.i("TAG","name is "+s);
            }
        });

定时5s执行一次

 Flowable.interval(5, TimeUnit.SECONDS)
                .subscribeOn(Schedulers.io())
                .observeOn(Schedulers.newThread())
                .subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long s) throws Throwable {
                Log.i("TAG","name is "+s);
            }
        });

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单RxJava 示例: ```java import io.reactivex.rxjava3.core.Observable; import io.reactivex.rxjava3.core.Observer; import io.reactivex.rxjava3.disposables.Disposable; public class RxJavaDemo { public static void main(String[] args) { Observable<String> observable = Observable.just("Hello, World!"); Observer<String> observer = new Observer<String>() { @Override public void onSubscribe(Disposable d) { // 在订阅时被调用 System.out.println("onSubscribe"); } @Override public void onNext(String s) { // 当收到数据时被调用 System.out.println("onNext: " + s); } @Override public void onError(Throwable e) { // 当发生错误时被调用 System.out.println("onError: " + e.getMessage()); } @Override public void onComplete() { // 当完成时被调用 System.out.println("onComplete"); } }; observable.subscribe(observer); } } ``` 这个示例中,我们创建了一个简单的 Observable 对象,它只发射了一个字符串 "Hello, World!"。然后我们创建了一个 Observer 对象,它定义了在收到数据、发生错误或完成时的行为。最后,我们通过调用 `observable.subscribe(observer)` 来订阅 Observable。 运行这个示例,你将会看到以下输出: ``` onSubscribe onNext: Hello, World! onComplete ``` 这表明在订阅时,`onSubscribe` 被调用;然后收到了数据 "Hello, World!",`onNext` 被调用;最后,`onComplete` 被调用,表示完成了数据的发射过程。 请注意,这只是 RxJava 的一个简单示例,RxJava 还有很多更强大的操作符和功能可以使用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值