Retrofit进行网络请求

发布时间:2022-06-23 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了Retrofit进行网络请求脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

一:Retrofit是什么?

准确来说,Retrofit是一个RESTful的HTTP网络请求框架的封装。

网络请求的工作本质上是 OkHttp完成,而Retrofit仅负责网络请求接口的封装。

Retrofit进行网络请求

1. App应用程序通过Retrofit请求网络,实际上是使用Retrofit接口层封装请求参数、HeaderUrl 等信息,之后由OkHttp完成后续的请求操作。

2. 在服务端返回数据之后,OkHttp将原始的结果交给Retrofit,Retrofit根据用户的需求对结果进行解析。所以,网络请求的本质仍旧是OkHttp完成的,retrofit只是帮使用者来进行工作简化的,比如配置网络,处理数据等工作,提高这一系列操作的复用性。

二:Retrofit对Okhttp做了什么

Retrofit并没有改变网络请求的本质,也无需改变,因为Okhttp已经足够强大,Retrofit的封装可以说是很强大,里面涉及到一堆的设计模式,可以通过注解直接配置请求,可以使用不同的http客户端,虽然默认是用http ,可以使用不同Json Converter 来序列化数据,同时提供对RxJava的支持,使用Retrofit + OkHttp + RxJava 可以说是目前比较潮的一套框架,但是需要有比较高的门槛。

下面我们来对比一下OKhttp网络请求和 retrofit网络请求的区别。

2.1. Okhttp请求总结

查看代码
private void testOkHttp() throws IOException {
    //Step1
    final OkHttpClient client = new OkHttpClient();
    //Step2
    final Request request = new Request.Builder()
     .url("https://www.google.com.hk").build();
    //Step3
    Call call = client.newCall(request);
    //step4 发送网络请求,获取数据,进行后续处理
    call.enqueue(new Callback() {
      @Override
      public void onFailure(Call call, IOException e) {
     }
      @Override
     public void onResponse(Call call, Response response) throws IOException {
          Log.i(TAG,response.toString());
          Log.i(TAG,response.body().string());
     }
   });
 }

「解析一下上面的代码」Step1:创建HttpClient对象,也就是构建一个网络类型的实例,一般会将所有的网络请求使用同一个单例对象。Step2:构建Request,也就是构建一个具体的网络请求对象,具体的请求url,请求头,请求体等等。Step3:构建请求Call,也就是将具体的网络请求与执行请求的实体进行绑定,形成一个具体的正式的可执行实体。Step4: 后面就进行网络请求了,然后处理网络请求的数据了。「总结一下」OKhttp的意义:OkHttp 是基于Http协议封装的一套请求客户端,虽然它也可以开线程,但根本上它更偏向真正的请求,跟HttpClient, HttpUrlConnection的职责是一样的。Okhttp的职责:OkHttp主要负责socket部分的优化,比如多路复用,buffer缓存,数据压缩等等。Okhttp给用户留下的问题:1)用户网络请求的接口配置繁琐,尤其是需要配置请求body,请求头,参数的时候;2)数据解析过程需要用户手动拿到responsbody进行解析,不能复用;3)无法适配自动进行线程的切换。这几个问题可以交给retrofit去解决

2.2 Retrofit请求总结

查看代码

//step1
Retrofit retrofit = new Retrofit.Builder()
       .baseUrl("https://www.wanandroid.com/")
       .addConverterFactory(GsonConverterFactory.create(new Gson()))
       .build();
//step2
ISharedListService sharedListService =  retrofit.create(ISharedListService.class);
//step3
Call<SharedListBean> sharedListCall = sharedListService.getSharedList(2,1);
//step4
sharedListCall.enqueue(new Callback<SharedListBean>() {
  @Override
  public void onResponse(Call<SharedListBean> call, Response<SharedListBean> response{
    if (response.isSuccessful()) {
        System.out.println(response.body().toString());
      }
    }
    @Override
    public void onFailure(Call<SharedListBean> call, Throwable t) {
     t.printStackTrace();
   }
});

Step1: 创建retrofit对象, 构建一个网络请求的载体对象,和okhttp构建OkhttpClient对象有一样的意义,只不过retrofit在build的时候有非常多的初始化内容,这些内容可以为后面网络请求提供准备,如准备 现成转换Executor,Gson convert,RxJavaCallAdapter。Step2:Retrofit的精髓,为统一配置网络请求完成动态代理的设置。Step3:构建具体网络请求对象Request(service),在这个阶段要完成的任务:1)将接口中的注解翻译成对应的参数;2)确定网络请求接口的返回值response类型以及对应的转换器;3)讲Okhttp的Request封装成为Retrofit的OKhttpCall。总结来说,就是根据请求service 的Interface来封装Okhttp请求Request。Step4:后面就进行网络请求了,然后处理网络请求的数据了

2.3「总结一下」Retrofit主要负责应用层面的封装,就是说主要面向开发者,方便使用,比如请求参数,响应数据的处理,错误处理等等。Retrofit封装了具体的请求,线程切换以及数据转换。网上一般都推荐RxJava+Retrofit+OkHttp框架,Retrofit负责请求的数据和请求的结果,使用接口的方式呈现,OkHttp负责请求的过程,RxJava负责异步,各种线程之间的切换,用起来非常便利。

三:retrofit是如何来封装okhttp请求的

Retrofit进行网络请求

大体的网络流程是一致的,毕竟都是通过okhttp进行网络请求。主要的步骤都是:创建网络请求实体client->构建真正的网络请求-> 将网络请求方案与真正的网络请求实体结合构成一个请求Call->执行网络请求->处理返回数据->处理Android 平台的线程问题。

在上图中,我们看到的对比最大的区别是什么?0)okhttp创建的是OkhttpClient,然而retrofit创建的是 Retrofit实例1)构建蓝色的Requet的方案,retrofit是通过注解来进行的适配2)配置Call的过程中,retrofit是利用Adapter适配的Okhttp 的Call3)相对okhttp,retrofit会对responseBody进行 自动的Gson解析4)相对okhttp,retrofit会自动的完成线程的切换。

脚本宝典总结

以上是脚本宝典为你收集整理的Retrofit进行网络请求全部内容,希望文章能够帮你解决Retrofit进行网络请求所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: