Retrofit+OKHttp+RxJava的使用

什么是响应式编程 

        响应式编程是一种基于异步数据 流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者为新的消费者与另外一 条流合并为一条新的流。

什么是RxJava 

  •  RxJava 是一种响应式编程,来创建基于事件的异步操作库。基于事件流的链式调用、逻辑清晰简洁。 
  • RxJava 我的理解是将事件从起点(上游)流向终点(下游),中间有很多卡片对数据进操作并传 递,每个卡片获取上一个卡片传递下来的结果然后对事件进行处理然后将结果传递给下一个卡片, 这样事件就从起点通过卡片一次次传递直到流向终点。

RxJava本质上是一个异步操作库,是一个能让你用极其简洁的逻辑去处理繁琐复杂任务的异步事件库。 

观察者模式

        Android中View的点击监听器的实现,View是被观察者,OnClickListener对象是观察者, Activity要如何知道View被点击了?那就是派一个OnClickListener对象,入驻View,与View达成一个订 阅关系,一旦View被点击了,就通过OnClickListener对象的OnClick方法传达给Activity。采用观察者模 式可以避免去轮询检查,节约有限的cpu资源。

Retrofit+OkHTTP+RxJava+RecycleView的实现步骤 

要引入项目依赖

//添加RxJava依赖
implementation "io.reactivex.rxjava3:rxjava:3.0.0"
//添加RxAndroid依赖,专门用于Android的Rx库
implementation 'io.reactivex.rxjava2:rxandroid:2.1.1'

//衔接 Retrofit & RxJava,此处一定要注意使用RxJava2的版本
implementation 'com.squareup.retrofit2:adapter-rxjava2:2.5.0'
//添加Retrofit依赖
implementation 'com.squareup.retrofit2:retrofit:2.5.0'
//添加Gson解析
implementation 'com.squareup.retrofit2:converter-gson:2.5.0'
//添加图片加载库依赖
implementation 'com.github.bumptech.glide:glide:4.12.0'

 首先要定义接口

public interface GETInterface {

    @GET("api/hotlist?type=36Ke")
    Observable<News> getObservable();

}

然后是在Activity中的实现方法 

  1.  创建请求接口
  2. 开始网络请求
  3. 处理返回结果
private void getObservable() {
        Retrofit retrofit=new Retrofit.Builder()
                .baseUrl("https://api.vvhan.com/")
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                .build();
        GETInterface request = retrofit.create(GETInterface.class);
        Observable<News> observable = request.getObservable();
        observable.subscribeOn(Schedulers.io())
                .observeOn(AndroidSchedulers.mainThread())
                .subscribe(new Observer<News>() {
                    @Override
                    public void onSubscribe(Disposable d) {

                    }

                    @Override
                    public void onNext(News news) {
                        adapter.setNews(news.getData());
                    }

                    @Override
                    public void onError(Throwable e) {
                        Log.i("onError", "连接失败");
                    }

                    @Override
                    public void onComplete() {
                        Log.i("onComplete", "连接完成");
                    }
                });
    }


版权声明:本文为N_Y_S原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。