Retrofit

介绍
  • Retrofit是Square公司基于RESTful风格推出的网络框架封装。Retrofit是基于OKHttp的网络请求框架的二次封装,其本质仍是OKHttp。
对比
  • AndroidAsnyHttp
  • 基于HTTPClient,作者已经停止维护,Android5.0不再使用HTTPClient,因此不推荐使用。
  • Volley
  • 基于HttpUrlConnection,Google官方推出,只适合轻量级网络交互如数据传输小,不适合大文件上传下载场景。
优点
  • API设计简洁易用
  • 注解化配置高度解耦
  • 支持多种解析器、支持Rxjava
使用
  1. Retrofit开源库、数据解析器集成,注册网络权限。
//依赖包导入 
    implementation 'com.squareup.retrofit2:retrofit:2.9.0'
    implementation 'com.squareup.retrofit2:converter-gson:2.9.0'    
//网络权限
    <uses-permission android:name="android.permission.INTERNET"/>
  1. 创建接口设置请求类型与参数
  • 常用参数注解

@GET、@POST:确定请求方式

@Path:请求URL的字符替代

@Query:要传递的参数

@QueryMap:包含多个@Query注解参数

@Body:添加实体类对象

@FormUrlEncoded:URL编码

//新建UserInfoModel类和UserMgrService接口
 @GET("login")
Call<UserInfoModel> login(@Query("username")String username, @Query("password")String password);
@POST("login")
@FormUrlEncoded
Call<UserInfoModel> login(@Field("username") String username, @Field("password") String password);
  1. 创建Retrofit对象,设置数据解析器
  • 常见数据解析器

Gson com.squareup.retrafit2:converter-gson:2.0.2

Jackson com.squareup.retrofit2:converter-jackson:2.0.2
Simple XML  com.squareup.retrofit2:converter-simplexml:2.0.
Protobuf com.squareup.retrofit2:converter-protobuf:2.0.2
Moshi  com.squareup.retrofit2:converter-moshi:2.0.2
Wire  com.squareup.retrofit2:converter-wire:2.0.2
Scalars  com.squareup.retrofit2:converter-scalars:2.0.2
 //创建Retrofit对象
    Retrofit retrofit = new Retrofit.Builder()
            .baseUrl(Constants.BASE_URL)
            .addConverterFactory(GsonConverterFactory.create())//数据解析器
            .build();
  1. 生成接口对象
 //生成接口对象
        UserMgrService userMgrService = retrofit.create(UserMgrService.class);
  1. 调用接口方法返回Call对象
    调用接口方法
Call zhangsan = userMgrService.login("张三", "123456");
  1. 发送请求(同步、异步)
  • 同步:调用Call对象的execute(),返回结果的响应体
  • 异步:调用Call对象的enqueue(),参数是一个回调
zhangsan.enqueue(new Callback<UserInfoModel>() {
            @Override
            public void onResponse(Call<UserInfoModel> call, Response<UserInfoModel> response) {
                int code = response.code();
                int code1 = response.body().code;
            }

            @Override
            public void onFailure(Call<UserInfoModel> call, Throwable t) {

            }
        });
  1. 处理返回数据

总结

  • Retrofit是基于OKHttp网络库的高级封装,采用注解、网络请求参数配置更灵活,扩展性更好,RESTful风格的API优先选用Retrofit。

破解Retrofit

  • Retrofit源码:http://github.com/square/retrofit

  • java内置的动态代理只支持接口

  • 代理的其它方案cglib

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

八归少年

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值