美文网首页
Retrofit源码分析总结

Retrofit源码分析总结

作者: QM | 来源:发表于2021-06-28 15:49 被阅读0次

    Retrofit怎么进行网络请求

    Retrofit主要是在create方法中采用动态代理模式实现接口方法,这个过程构建了一个ServiceMethod对象,根据方法注解获取请求方式,参数类型和参数注解拼接请求的链接,当一切都准备好之后会把数据添加到Retrofit的RequestBuilder中。然后当我们主动发起网络请求的时候会调用okhttp发起网络请求,okhttp的配置包括请求方式,URL等在Retrofit的RequestBuilder的build()方法中实现,并发起真正的网络请求。

    Retrofit使用方法

    
    Retrofit retrofit = new Retrofit.Builder()
                    .baseUrl(hostUrl)
                    .addCallAdapterFactory(RxJava2CallAdapterFactory.create())
                    .client(OkHttpClient())
                    .build();
    
    ApiService apiService = retrofit.create(ApiService.class)
    Call<ResponseBody> call = ApiService .getInfo("codeqm");
    
    //同步请求方式
     call.request();
     //异步请求方式
     call.enqueue(new Callback<ResponseBody>() {
                @Override
                public void onResponse(Call<ResponseBody> call, Response<ResponseBody> response) {
                    //请求成功回调
                }
    
                @Override
                public void onFailure(Call<ResponseBody> call, Throwable t) {
                    //请求与失败回调
                }
            });
    
    
    Retrofit

    Retrofit的具体实现原理梳理总结:

    • 使用构建模式创建Retrofit实例对象
    • 使用动态代理模式,通过Retrofit实例对象的create方法动态创建网络请求接口的代理类
    • 使用代理类调用方法发起网络请求时,会通过CallAdapterFactory创建的CallAdapter对象的adapt方法调用OkHttpCall的enqueue方法发起网络请求
    • OkHttpCall的enqueue方法先根据注解、请求参数等信息构建出OkHttpClient的网络请求Call对象,接着使用Call对象发起网络请求
    • 网络请求回来时,使用ServiceMethod的toResponse方法中调用响应内容适配器的具体实现类的convert发放进行解析
    • Retrofit只是对网络请求进行封装的一个框架,它本身并不发起网络请求,为的是方便我们使用、优化我们网络请求的代码、对网络请求进行扩展(可以自定义请求适配器、响应内容解析器等)。

    使用Retrofit需要注意一下细节:

    • 必须要要配置baseUrl
    • 定义网络请求必须是接口不能是类,且不能继承其他的接口
    • 定义网络请求接口时,必须要遵循Retrofit的语义规则,比如:@GET对应@Query;@FormUrlEncoded对应@Field;@Multipart对应@Part等
    • 如果配套使用Rxjava,则必须遵循RxJava语义
    • 对应OkHttp头部的key不能null也不能为空字符串;value不能为null

    参考链接:
    https://zhuanlan.zhihu.com/p/35121326
    https://www.jianshu.com/p/8512454df047
    https://www.jianshu.com/p/f57b7cdb1c99

    相关文章

      网友评论

          本文标题:Retrofit源码分析总结

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