Retrofit2介绍

Retrofit介绍

Retrofit是Square公司基于RESTful风格的网络框架封装,它并不是一个网络框架,而是对OKHttp的二次封装,其本质仍是OKHttp。

github地址

  • API设计简洁;
  • 通过注解配置请求,高度解耦;
  • 支持多种解析器,支持Gson(默认)、Jackson、Protobuf等;
  • 支持RxJava;
  • Retrofit2中导入了OKHttp3;

其他网络框架介绍

AndroidAsynHttp
  • 基于HttpClient;
  • 在UI线程外异步的进行Http请求,在匿名回调中处理请求结果。
  • 自动智能请求重试;
  • 持久化Cookie存储,保存cookie到应用程序的SharedPreferences中;
  • Android5.0不推荐使用HttpClient,作者已停止维护
Volley
  • Google官方推出的;
  • 基于HttpUrlConnection;
  • 封装了UIL图片加载框架,支持图片加载;
  • 支持网络请求的排序、优先级处理缓存,支持多级别取消请求;
  • 支持与Activity的生命周期联动;
  • 可拓展性好,支持HttpClient、HttpUrlConnection、OKHttp;
  • 适合轻量级网络交互,网络请求频繁,传输数据量小,不适合大文件上传下载的场景
OKHttp
  • 基于NIO和OKio,性能更高,请求处理速度快;
  • 支持SPDY,共享同一个Socket来处理同一个服务器所有的请求;
  • 支持Http2.0,WebSocket;
  • 支持同步、异步请求;
  • 封装了线程池、数据转换、参数使用、错误处理等;
  • 支持GZIP来减少数据流量;
  • 缓存响应数据来减少重复的网络请求;
  • 解决了代理服务器问题和SSL握手失败问题;
  • 适用于重量级网络交互,网络请求频繁,传输数据量大

使用步骤

  • 添加网络权限

  • 导入依赖包
     //retrofit2
    implementation 'com.squareup.retrofit2:retrofit:${retrofit_version}'
    implementation 'com.squareup.retrofit2:converter-gson:${retrofit_version}'
    implementation 'com.squareup.retrofit2:adapter-rxjava2:${retrofit_version}'

版本号可在工程的build.gradle中统一定义

ext {
	retrofit_version = '2.7.2'
}
  • 创建接口,设置请求的类型与参数
/**
 * 网络接口
 */
public interface NetworkApiService {

    @GET("login")
    Call login(@Query("username") String username, @Query("password") String password);
}
  • 创建Retrofit对象,设置数据解析器
Retrofit retrofit = new Retrofit.Builder().baseUrl(BASE_URL)
        .addConverterFactory(GsonConverterFactory.create()).build();
  • 生成接口对象
NetworkApiService service = retrofit.create(NetworkApiService.class);
  • 调用接口方法返回Call对象
Call call = service.login(userName, password);
  • 发送请求(同步、异步)

    • 同步:Call.execute(),返回结果的响应体
    • 异步:Call.enqueue(),参数是一个回调
  • 处理返回数据

注意:

Retrofit2 的baseUlr 必须以 /(斜线)结束,不然会抛出一个IllegalArgumentException,所以如果你看到别的教程没有以 / 结束,那么多半是直接从Retrofit 1.X 照搬过来的。

有些特殊情况可以不以/结尾,比如 其实这个 URLhttps://www.baidu.com?key=value用来作为baseUrl其实是可行的,因为这个URL隐含的路径就是 /(斜线,代表根目录) ,而后面的?key=value在拼装请求时会被丢掉所以写上也没用。之所以 Retrofit 2 在文档上要求必须以 /(斜线) 结尾的要求想必是要消除歧义以及简化规则。


注解

请求方法注解

  • @GET

  • @POST

  • @PUT

  • @DELETE

  • @PATCH:patch请求,该请求是对put请求的补充,用于更新局部资源

  • @HEAD

  • @OPTIONS:旨在发送一种“探测”请求,以确定针对某个目标地址的请求必须具有怎样的约束(比如应该采用怎样的HTTP方法以及自定义的请求报头),然后根据其约束发送真正的请求。比如针对“跨域资源”的预检(Preflight)请求采用的HTTP方法就是OPTIONS。

  • @HTTP:可以替换以上所有注解,有三个属性:method、path、hasBody

请求头注解

  • @Headers:用于添加固定请求头,可以同时添加多个。通过该注解添加的请求头不会互相覆盖。

  • @Header:作为方法的参数传入,用于添加不固定值的请求头,该注解会更新已有的请求头。

请求参数注解

  • @Body:多用于post请求发送实体类对象;

  • @Field:多用于post请求中表单字段,Field和FieldMap需要与FormUrlEncoded结合使用。

  • @FieldMap:和@Field作用一直,用于多个表单参数;

  • @Part:用于表单字段。Part和PartMap与Multipart注解结合使用,适用于文件上传。

  • @PartMap:用于表单字段,默认接受的类型是Map,可用于多文件上传。

  • @Path:请求URL的字符替代。

  • @Query:用于Get中要传递的参数。

  • @QueryMap:包含多个@Query的参数集合。

  • @Url:指定请求路径。

请求和响应格式注解

  • @FormUrlEncoded:表示请求发送编码表单数据,配合@Field和@FieldMap使用

  • @ Multipart:表示请求发送Multipart数据,配合@Part和@PartMap使用

  • @Streaming:表示响应用字节流的形式返回。如果没有使用该注解,默认会把数据全部载入内存。该注解适用于下载大文件的场景。

常用数据解析器

  • Gson com.squareup.retrofit2:converter-gson:${retrofit_version}

  • Jackson com.squareup.retrofit2:converter-jackson:${retrofit_version}

  • Simple XML com.squareup.retrofit2:converter-simplexml:${retrofit_version}

  • Protobuf com.squareup.retrofit2:converter-protobuf:${retrofit_version}

  • Moshi com.squareup.retrofit2:converter-moshi:${retrofit_version}

  • Wire com.squareup.retrofit2:converter-wire:${retrofit_version}

  • Scalars com.squareup.retrofit2:converter-scalars:${retrofit_version}


参考资料

  • Retrofit网络库
  • Android网络框架对比
  • Android主流网络框架
  • Retrofit2详解
  • HTTP的请求方法OPTIONS

你可能感兴趣的:(Android,retrofit2)