Rxjava2.0浅析

Rxjava2.0是在Rxjava1的基础上进行了升级
Rxjava2.0和Rxjava1的区别
Rxjava2.0官方Javadoc文档

使用

无论是Rxjava1.0还是2.0,创建Rxjava完整流程分为三步
1.创建 Observer

 Observer<WeatherInfoEntity> observer = new Observer<WeatherInfoEntity>() {
            @Override
            public void onSubscribe(Disposable d) {
                Log.d(TAG, "onSubscribe");
            }

            @Override
            public void onNext(String value) {
                Log.d(TAG, value.getCity());
                weatherView.showWeatherData(value);
            }

            @Override
            public void onError(Throwable e) {
                e.printStackTrace();
                Log.d(TAG, "error");
            }

            @Override
            public void onComplete() {

            }
        };

Rxjava2.0创建的Observer中多了一个回调方法onSubscribe,传递参数为Disposable ,Disposable 相当于RxJava1.x中的Subscription,用于解除订阅。在RxJava1.x中是订阅时返回Disposable,而不是选择回调出来。官方说是为了设计成Reactive-Streams架构。假设Observer需要在接收到异常数据项时解除订阅,在RxJava2.x中则非常简便。只要在onSubscribe中获取Disposable ,然后在onNext()方法中出现异常数据时,就可以调用disposable.dispose()解除订阅了。

2.创建 Observable

Observable<WeatherInfoEntity> observable = Observable.create(new ObservableOnSubscribe<WeatherInfoEntity>() {
           @Override
           public void subscribe(ObservableEmitter<WeatherInfoEntity> e) throws Exception {
               e.onNext("zoky");
           }
       });

这里跟1.0不同的是:方法的回调的是ObservableEmitter,字面意思即发射器,用于发射数据(onNext)和通知(onError/onComplete)。

3.建立订阅关系

observable.subscribe(observer);

这样就完成简单的Rxjava订阅事件流程。

跟Rxjava1一样,Rxjava2跟Retrofit2.x的结合也是听方便的,只要我们在Service中请求方法中返回一个Observable对象,就可以很方便的使用Rxjava来执行网络请求结果的回调。:

public interface WeatherService {
    @Headers("Cache-Control: public, max-age=3600")
    @GET("{weatherId}.json")
    Observable<WeatherInfoEntity> getWeatherInfo(@Path("weatherId") String weatherId );
}

public void getWeatherResult(String areaId) {
        if (areaId == null) {
            Log.d(TAG, "aread is null");
        }

 okHttpClient = builder.build();
        Retrofit retrofit = new Retrofit.Builder().client(okHttpClient).baseUrl(BASE_URL)
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .addConverterFactory(GsonConverterFactory.create()).build();
        service = retrofit.create(WeatherService.class);

        service.getWeatherInfo(areaId)
                .subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<WeatherInfoEntity>() {
                    @Override
                    public void onSubscribe(Disposable d) {
                        Log.d(TAG, "onSubscribe");
                    }

                    @Override
                    public void onNext(WeatherInfoEntity value) {
                        Log.d(TAG, value.getCity());
                        weatherView.showWeatherData(value);
                    }

                    @Override
                    public void onError(Throwable e) {
                        e.printStackTrace();
                        Log.d(TAG, "error");
                    }

                    @Override
                    public void onComplete() {

                    }
                });


    }

关于操作符,Schedule线程切换原理等,RxJava1.x与RxJava2.x在命名和行为上大多数保持了一致,
这里推荐看抛物线前辈的: 给Android开发者的Rxjava指南
中的操作符部分,我目前能力有限,就不在这里赘述了。虽然现在已经更新到Rxjava2.0了,但这篇文章应该是学习Rxjava的入门经典了。推荐一看~~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值