Android框架学习之RxJava(三)

//这个例子中onNext()会被调用多次
        PublishSubject.create()
                .subscribe(new Subscriber<Object>() {
                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Object o) {
                             //会被多次调用
                    }
                });
Single.just(4).map(new Func1<Integer, String>() {
            @Override
            public String call(Integer integer) {
                return String.valueOf(integer);
            }
        })
                .subscribe(new SingleSubscriber<String>() {
            @Override
            public void onSuccess(String value) {
                //mValueDisplay.setText(value);
            }

            @Override
            public void onError(Throwable error) {

            }
        });
/综合使用
        final PublishSubject<String> mSearchResultsSubject = PublishSubject.create();
        sub = mSearchResultsSubject
                .debounce(400, TimeUnit.MILLISECONDS)
                //这个方法告诉mSearchResultsSubject在没有数据传入达400毫秒时才发送数据
                //当用户400ms都没有改变输入内容时,Subject才会发送最新的搜索字符串
                .observeOn(Schedulers.io())
                //我们想通过RestClient来访问服务器,而因为RestClient涉及IO操作,我们需要在IO Scheduler中进行这个操作,所以要写observeOn(Schedulers.io())。

                .map(new Func1<Object, Object>() {

                    @Override
                    public Object call(Object o) {
                        //在map中我们可以调用任意外部方法,这里可以调用任意外部方法
                        return null;//在这里进行网络请求
                    }
                })
                .observeOn(AndroidSchedulers.mainThread())
                //因为map方法会在IO Scheduler中运行,而我们又要用其返回值填充View,
                // 所以要重新切换到UI线程,所以要写observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<Object>(){

                    @Override
                    public void onCompleted() {

                    }

                    @Override
                    public void onError(Throwable e) {

                    }

                    @Override
                    public void onNext(Object o) {
                       //在这里展示数据
                    }
                });
/**
         * 如果在doOnSubscribe()之后指定了subscribeOn(),它决定了doOnSubscribe()在哪种线程中执行。
         * (1)doOnSubscribe()之前的subscribeOn()不会影响它。
         * (2)doOnSubscribe()之后的subscribeOn(),且是最近的才会影响它。
         * doOnSubscribe用于在call之前执行一些初始化操作
         */
        Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                subscriber.onNext(2323);

            }
        }).subscribeOn(AndroidSchedulers.mainThread())  // 在doOnSubscribe()之前,不会影响上面的doOnSubscribe()
                .doOnSubscribe(new Action0() {
                    @Override
                    public void call() {
                       //显示提示框
                    }
                }).subscribeOn(Schedulers.io()) // 会影响上面的doOnSubscribe()
                .observeOn(Schedulers.io())
                .subscribeOn(AndroidSchedulers.mainThread()) // 不会影响上面的doOnSubscribe()
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {

                    }
                });
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值