美文网首页
RxJava + Retrofit2 + OkHttp总结

RxJava + Retrofit2 + OkHttp总结

作者: itstrongs | 来源:发表于2017-10-16 16:20 被阅读8次

面试中几次被问到是否了解RxJava、Retrofit、OkHttp,以及封装使用,看来不会用这三剑客工作不好找啊,总结一下最近学习的关于RxJava + Retrofit2 + OkHttp的知识点。

首先总结一下他们是干什么的。

RxJava其实就是处理异步请求的,Retrofit2是基于okhttp的可以方便通过注解来请求网络的框架,自带okhttp对象,也可以传入自己创建的okhttp对象,可以在自己创建的okhttp对象很多网络请求配置,比如设置超时、拦截器、持久化、缓存、公共参数、Gson解析...

所以RxJava + Retrofit2 + OkHttp结合使用中,RxJava负责异步处理,Retrofit2负责网络请求,OkHttp负责网络请求处理。

流程

  • 首先创建Retrofit实例对象
retrofit = new Retrofit.Builder()
                .baseUrl(BASE_URL)
                .client(builder.build())
                .addConverterFactory(GsonConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();
  • 创建请求接口,返回值为被观察者对象
@GET("top250")
Observable<MovieSubject> getTop250(@Query("start") int start, @Query("count")int count);
  • 通过请求返回的被观察者对象订阅观察者对象,处理异步请求结果
mMovieData.getMovieData(0, 20)
        .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe(new Subscriber<MovieSubject>() {
            @Override
            public void onCompleted() { }

            @Override
            public void onError(Throwable e) { }

            @Override
            public void onNext(MovieSubject movieSubject) {
                LogUtils.d("movieSubject:" + movieSubject);
                mMovieAdapter.setMovies(movieSubject.subjects);
                mMovieAdapter.notifyDataSetChanged();
            }
        });

相关文章

网友评论

      本文标题:RxJava + Retrofit2 + OkHttp总结

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