rxjava2要点介绍

本文深入探讨RxJava2相较于RxJava1的改进,包括更成熟的接口设计、新增的Flowable特性及其流控机制,以及Observable创建和响应数据的简化方式。通过具体代码示例,展示了如何使用RxJava2结合OkHttp进行网络请求处理。
摘要由CSDN通过智能技术生成

rxjava2比1有什么差异?

如果说开发rxjava1的时候,作者只是个程序初哥,那么rxjava2的时候,作者已经是有点经验的人了,rxjava2的接口函数、类名的命名以及接口调用方式,都比rxjava1成熟不少,且更容易理解,逻辑也合理些。

flowable

数据/事件源增加了一个叫flowable的东西,和observable类似,都是把数据/事件推给订阅方进行处理。

特点如其名flowable,支持流控,采用backpressure的方式。

Observable的创建

这样:Observable.create(new ObservableOnSubscribe) 。

不再是rxjava1那种:Observable.create(new Observable.OnSubscribe);

其实上面的“OnSubscribe”,建议修改为“callBack”可能更好理解些。

看代码:

Observable.create(new ObservableOnSubscribe<Integer>() {
     public void subscribe(ObservableEmitter<Integer> e)
        {
            e.onNext(1);
            e.onNext(2);
            e.onNext(3); 
            e.onComplete(); 
        } 
    })

响应/处理 数据/事件

看代码吧:

Observable dataSource = Observable.create(...);
dataSource.subscribe(new Observer<Integer>() {
        private int i; 
        private Disposable mDisposable; 
    
        public void onSubscribe(Disposable d) { mDisposable = d; } 

        public void onNext(@NonNull Integer integer) {
             i++; 
            if (i == 2)
                mDisposable.dispose(); 
        } 

        public void onError(Throwable e) { log(e.getMessage()); } 
        public void onComplete() { log("onComplete"); } 
    }
)

上面这种响应,有点复杂,可以用简单的!

例如:Consumer ,用于接收单个值,BiConsumer 则是接收两个值,Function 用于变换对象,Predicate 用于判断。

subscribeOn

指定数据/事件发射动作时候的线程。多次调用,以第一次的为准,后面的调用无效。

observeOn

指定订阅者处理数据/事件所在的线程。可以调用多次指定在不同线程做不同的数据/事件处理。

okhttp使用rxjava例子

Observable.create(new ObservableOnSubscribe<Response>()
{
    public void subscribe(ObservableEmitter<Response> emitter) throws Exception
    {
        Request.Builder builder = new Request.Builder().url("http://api.test.com/?abc=123").get();
        Request request = builder.build();
        Call call = new OkHttpClient().newCall(request);
        Response response = call.execute();
        emitter.onNext(response);
    }
})
.map(new Function<Response, HttpAPIResultObject>()
{
    public HttpAPIResultObject apply(Response response) throws Exception
    {
        if (response.isSuccessful())
        {
            ResponseBody body = response.body();
            if (body != null)
                return new Gson().fromJson(body.string(), HttpAPIResultObject.class);
        }
        return null;
    }
})
.observeOn(AndroidSchedulers.mainThread())
.doOnNext(new Consumer<HttpAPIResultObject>()
    {
        public void accept(HttpAPIResultObject s) throws Exception
        {
            log("可以在这里做存储动作" + s.toString());
        }
    }
)
.subscribeOn(Schedulers.io()) // io线程处理网络过程
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Consumer<HttpAPIResultObject>()
    { // UI线程处理
        public void accept(HttpAPIResultObject data) throws Exception
        {
            log("ui线程处理,可以在这里做界面相关操作" + data.toString());
        }
    }
    ,new Consumer<Throwable>()
    {
        public void accept(Throwable throwable) throws Exception
        {
            log("失败" + throwable.getMessage());
        }
    }
);

 

 

本文未完待续。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值
>