美文网首页互联网科技ITBOX程序员
RxJava 的使用与理解(二)

RxJava 的使用与理解(二)

作者: 孙福生微博 | 来源:发表于2016-04-12 13:47 被阅读428次

    接下来把Rxjava在实际的项目中使用,并结合Retrofit网络库,源码参考个人作品【图灵机器人】

    看一张示例Demo图

    turing_1.png

    Demo下载地址

    仅使用Retrofit请求图灵API接口,获得问答信息

    private void requestApiByRetrofit(String info) {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(TulingParams.TULING_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .build();
    
        RetrofitApi api = retrofit.create(RetrofitApi.class);
    
        Call<MessageEntity> call = api.getTuringInfo(TulingParams.TULING_KEY, info);
        call.enqueue(new Callback<MessageEntity>() {
            @Override
            public void onResponse(Call<MessageEntity> call, Response<MessageEntity> response) {
                handleResponseMessage(response.body());
            }
    
            @Override
            public void onFailure(Call<MessageEntity> call, Throwable t) {
            }
        });
    }
    

    Retrofit是Square公司提供的一个类型安全的Http Client,由于Retrofit本身是支持RxJava的,因此这两者理所当然搭配使用。

    使用RxJava和Retrofit请求图灵API接口,获得问答信息

    private void requestApiByRetrofit_RxJava(String info) {
        Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(TulingParams.TULING_URL)
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
    
        RetrofitApi api = retrofit.create(RetrofitApi.class);
    
        api.getTuringInfoByRxJava(TulingParams.TULING_KEY, info)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Subscriber<MessageEntity>() {
                    @Override
                    public void onCompleted() {
                    }
    
                    @Override
                    public void onError(Throwable e) {
                    }
    
                    @Override
                    public void onNext(MessageEntity entity) {
                        handleResponseMessage(entity);
                    }
                });
    }
    

    与上一节使用与分析不同的是这节中使用了RxJava的Scheduler调度器,通过Scheduler可以指定代码执行的线程。
    下面列举了RxJava内置的几种线程:
    AndroidSchedulers.mainThread() 主线程
    Schedulers.immediate() 当前线程,即默认Scheduler
    Schedulers.newThread() 启用新线程
    Schedulers.io() IO线程,内部是一个数量无上限的线程池,可以进行文件、数据库和网络操作。
    Schedulers.computation() CPU计算用的线程,内部是一个数目固定为CPU核数的线程池,适合于CPU密集型计算,不能操作文件、数据库和网络。
    subscribeOn()和observeOn()可以用来控制代码的执行线程。

    关于我

    个人邮箱:sfsheng0322@126.com
    GitHub主页
    简书主页
    个人博客
    新浪微博

    相关文章

      网友评论

        本文标题:RxJava 的使用与理解(二)

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