Android网络请求库之Retrofit

Android网络请求库之Retrofit

八归少年 1,388 2020-06-10

介绍

  • 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"/>
    
  2. 创建接口设置请求类型与参数。

    • 常用参数注解。
    @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);
    
  3. 创建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
    
  4. 生成接口对象。

//生成接口对象
UserMgrService userMgrService = retrofit.create(UserMgrService.class);
  1. 调用接口方法返回Call对象。
//调用接口方法
Call<UserInfoModel> 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。

Copyright: 采用 知识共享署名4.0 国际许可协议进行许可

Links: https://www.yanghujun.com/archives/retrofit