网络请求Retrofit介绍
Retreofit是一个适用于 Android 和 Java 的类型安全的 HTTP 客户端。特别说明Retrofit网络请求本质是有OkHttp完成的,而Retrofit仅负责网络请求接口的封装
使用步骤
添加网络请求权限
<uses-permission android:name="android.permission.INTERNET"/>
添加第三方库依赖
implementation 'com.squareup.retrofit2:retrofit:XXX'
implementation 'com.squareup.retrofit2:converter-scalars:XXX'
创建用于描述请求的接口
进行请求
网络请求方法
@GET、@POST、@PUT、@DELETE、@HEAD
以上方法分别对应 HTTP中的网络请求方式, 每个注解后面都可以设置一个URL,也可以不设置
标记类
a.FormUrlEncoded
作用:表示发送form-encoded的数据
注意:每个键值对都需要用@Filed来注解键名,随后的对象需要提供值。
b.Multipart
作用:表示发送form-encoded的数据(适用于 有文件 上传的场景)
注意:每个键值对都需要用@part来注解键名,随后对象需要提供值
c.@Streaming
作用:表示返回的数据以流的形式返回,场用于大文件传输的场景
注意:url由于是可变的,因此用 @URL 注解符号来进行指定,大文件官方建议用 @Streaming 来进行注解,不然会出现IO异常,小文件可以忽略不注入。如果想进行断点续传的话 可以在此加入header
网络请求参数
a.@Header & @Headers
作用:添加请求头
b.@Body
作用:以Post方式传递自定义数据类型给服务器
注意: 如果提交的是一个Map,那么作用相当于@Field,不过Map要经过FormBody.Builder 类处理成为符合 Okhttp 格式的表单
c.Field&FieldMap
作用:发送 Post请求 时提交请求的表单字段
注意:与 @FormUrlEncoded 注解配合使用
d.@Part & @PartMap
作用:发送的Post请求时提交的表单字段
注意:与 @Multipart 注解配合使用
与@Field的区别:功能相同,但携带的参数类型更加丰富,包括数据流,所以适用于 有文件上传 的场景
e.@Query和@QueryMap
作用:用于 @GET 方法的查询参数(Query = Url 中 ‘?’ 后面的 key-value)
使用:和上面的两个相同
f. @Path
作用:URL的省缺值
g.@Url
作用:直接传入一个请求的URL变量