Retrofit官方文档翻译
Retrofit官方文档翻译
官方文档网址
http://square.github.io/retrofit/
介绍
Retrofit 将你的 HTTP API 转换为 Java 接口。
public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}
Retrofit 类会生成一个 GitHubService 接口的实现对象。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();
GitHubService service = retrofit.create(GitHubService.class);
创建的 GitHubService 中的每一个 Call 都会向远程 Web 服务端发送一个同步或异步的 HTTP 请求。
Call<List<Repo>> repos = service.listRepos("octocat");
使用注解描述 HTTP 的请求:
- URL 参数替换和查询参数支持
- 对象转换为请求体(如, JSON ,协议缓存区)
- 多方面请求体和文件上传
API 声明
接口方法及其参数注释说明如何处理请求。
请求方法
每个方法必须有一个提供请求方法和相关的 URL 的 HTTP 注解。有 5 个内置的注解:GET
、POST
、PUT
、DELETE
和HEAD
。资源相关的 URL 由注解指定。
@GET("users/list")
还可以在 URL 中指定查询参数。
@GET("users/list?sort=desc")
URL 操作
可以使用替换块和方法的参数动态更新请求的URL。替换块是一个由 { 和 } 包裹的字符字符串。对应的参数必须使用同样的字符串 @Path 注解。
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId)
请求参数也可以增加。
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id") int groupId,@Query("sort") String sort)
对于复杂的请求参数组合可以使用 Map
。
@GET("group/{id}/users")
Call<List<User>> groupList(@Path("id")int groupId,@QueryMap Map<String,String> options);
请求体
@Body 注解被指定作为 HTTP 的请求体去使用。
@POST("users/new")
Call<User> createUser(@Body User user)
对象可以在 Retrofit
实例中使用指定的转换器来进行转换。如果不添加转换器,则只能使用 RequestBody
。
格式转码和表单
也可以声明方法发送格式变化和表单数据。
当方法中提供了 @FormUrlEncoded
时,发送表单数据。@Field
的每一个键值对注解包含名称和提供的值。
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first,@Field("last_name") String last)
当方法中提供了 @Multipart
时,表单请求被使用。 单子声明使用 @Part
注解。
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo,@Part("description") RequestBody description);
表单部分使用 Retrofit
的一个转换器,也可以通过实现 RequestBody
处理它们自己的序列化。
头部操作
可以使用 @Headers
注解为方法这只静态的头。
@Headers("Cache-Control: max-age=640000")
@GET("widget/list")
Call<List<Widget>> widgetList();
@Headers({
"Accept: application/vnd.github.v3.full+json",
"User-Agent: Retrofit-Sample-App"
})
@GET("users/{username}")
Call<User> getUser(@Path("username") String username);
注意,头不会覆盖彼此,相同名字的所有头都被包含在请求中。
一个请求头可以使用 @eader
注解动态更新。相应的参数必须提供 @Header
。如果该值为空,头将会被忽略。否则,在数值上调用 toString
并且使用结果。
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
与查询参数相同,对于复杂的头组合,可以使用 Map
。
@GET("user")
Call<User> getUser(@HeaderMap Map<String,String> headers)
可以使用 OkHttp 拦截器指定需要添加到每一个请求的头。
同步与异步
调用实例可以同步或异步执行。每一个实例只能使用一次,但调用 clone()
将创建一个可以使用的新的实例。
在 Android ,回调将在主线程上执行,在 JWM ,回调将发生在执行 HTTP 请求的同意线程上。
Retrofit 配置
Retrofit
是将 API 接口转换为回调对象的类。默认情况下, Retrofit
将提供平台合适的默认值并且允许自定义。
转换器
默认情况下,Retrofit
只能将 HTTP 主体反序列化为 OkHttp
的 ResponseBody
类型,并且只能接收 @Body
的 ResponseBody
类型。
可以添加转换器来支持其他类型。可以方便的使用 6 个常用的模块模式序列化库。
- Gson : com.squareup.retrofit2:cenverter-gson
- Jackson : com.squareup.retrofit2:converter-jackson
- Moshi : con.squareup.retrofit2:converter-moshi
- Protobuf : com.squareup.retrofit2:converter-protobuf
- Wire : com.squareup.retrofit2:cenver-wire
- Simple XML : com.squareup.retrofir2:converter-simplexml
- Scalars(primitives,boxed,and String):com.square.retrofit2:converter-scalars
下面是使用 GsonConverterFactory 类生成 GitHubService 接口实现的例子,该接口使用 Gson 进行反序列化。
Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com")
.addConverterFactory(GsonConverterFactory.create())
.build()
GitHubService service = retrofit.create(GithubService.class);
自定义转换器
如果需要与使用 Retrofit 不支持的内容格式(如, YAML , txt , 自定义格式)的 API 或者希望使用实现现有格式的不同库,可以轻松创建自己的转换器。创建继承 Converter.Factory 类的类并且在创建适配器是传入实例。
下载
Retrofit的源码、例子和解释都在 Github 上。
MAVEN
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>(insert latest version)</version>
GRADLE
implementation 'com.squareup.retrofit2:retrofit:(insert latest version)'
Retrofit请求的最低是 Java 7 或 Android 2.3 。
R8/PROGUARD
如果使用 R8 或者 ProGuard ,则添加选项到文件中。
如果使用 OKHTTP 和 Okio 的库,也需要同样的方法。
贡献
如果希望贡献代码,可以通过 GitHub fork 库并发送提交请求。
提交代码时,请尽一切努力遵循校友的约定和样式以确保保持代码的可能性。请确保代码的运行和测试完整。
在代码被合并到项目之前需要遵守个人贡献者许可协议。
许可
版权所有 2013 Square,Inc。
根据 Apache 许可证 2.0 (License)获得许可;除非符合许可,否则不得使用此文件。可以在http://www.apache.org/licenses/LICENSE-2.0处获得许可。除非适用法律或书面同意,根据许可证发布的软件按 "AS IS" 基础上发布,没有任何形式的保证或条件,无论是明示还是暗示。
有关许可证下的权限和限制的特定语言,请参阅许可证。
Retrofit官方文档翻译的更多相关文章
- Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)中一些知识点
Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Flume官方文档翻译--Flume 1.7.0 User Guide (unr ...
- Flume官方文档翻译——Flume 1.7.0 User Guide (unreleased version)(二)
Flume官方文档翻译--Flume 1.7.0 User Guide (unreleased version)(一) Logging raw data(记录原始数据) Logging the raw ...
- 蓝牙4.0——Android BLE开发官方文档翻译
ble4.0开发整理资料_百度文库 http://wenku.baidu.com/link?url=ZYix8_obOT37JUQyFv-t9Y0Sv7SPCIfmc5QwjW-aifxA8WJ4iW ...
- GreenDao官方文档翻译(上)
笔记摘要: 上一篇博客简单介绍了SQLite和GreenDao的比较,后来说要详细介绍下GreenDao的使用,这里就贴出本人自己根据官网的文档进行翻译的文章,这里将所有的文档分成上下两部分翻译,只为 ...
- Aircrack-ng官方文档翻译[中英对照]---Airdecap-ng
Aircrack-ng官方文档翻译---Airdecap-ng Description[简介] With airdecap-ng you can decrypt WEP/WPA/WPA2 capt ...
- Aircrack-ng官方文档翻译[中英对照]---Airmon-ng
Aircrack-ng官方文档翻译---Airmon-ng Description[简介] This script can be used to enable monitor mode on wire ...
- Aircrack-ng官方文档翻译[中英对照]---Aireplay-ng
Aircrack-ng官方文档翻译---Aireplay-ng[90%] Description[简介] Aireplay-ng is used to inject frames. Aireplay- ...
- Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET
OSNIT_百度百科 Salt Stack 官方文档翻译 - 一个想做dba的sa - 博客频道 - CSDN.NET Salt Stack 官方文档翻译 分类: 自动运维 2013-04-02 11 ...
- Spark官方文档翻译(一)~Overview
Spark官方文档翻译,有问题请及时指正,谢谢. Overview页 http://spark.apache.org/docs/latest/index.html Spark概述 Apache Spa ...
随机推荐
- C# 线程获取/设置控件(TextBox)值
线程读写控件需要用委托(delegate)与Invoke/BeginInvoke来进行 参考内容:http://www.cnblogs.com/runner/archive/2011/12/30/23 ...
- Docker代理设置方法
1.注意Docker版本(此处版本为docker-ce-18.06.1) docker version 2.编辑Docker服务配置文件 vim /usr/lib/systemd/system/doc ...
- HTTP知识点【总结篇】
1.什么是HTTP协议? 客户端和服务器之间数据传输的格式规范.全拼:HyperText Transfer Protocol:超文本传输协议. 2.http协议是无状态协议?怎么解决无状态协议? 无状 ...
- jira6.3.6创建问题不自动发邮件通知的问题
装完jira6.3.6后,设置好邮件服务器,测试没有问题.但是创建问题不自动发邮件提示用户.折腾了大半天,请教了一位大神,终于搞定.步骤是: agile->系统->用户界面->用户缺 ...
- Jython 在 Eclipse 控制台报错 console: Failed to install '': java.nio.charset.UnsupportedCharsetException: cp0.
在 Eclipse 中使用 Jython 时报错 解决办法 右键 --> Run As --> Run Configurations --> Arguments --> 设置 ...
- <taglib>报错
问题:web.xml中<taglib>报错 2.3版本可以直接卸载<web-app>中 2.4及之后放在<jsp-config>中 <jsp-config&g ...
- AJAX随笔2
Ajax作用: 是用JavaScript向服务器发送异步请求,然后服务器给出响应,然后以XML格式的文件返回给浏览器端! 异步: 当浏览器向服务器发送请求的时候,不是整个页面刷新,而是局部刷新[局部信 ...
- 使用rancher2建k8s集群--个人学习记录
视频地址这里: http://live.vhall.com/431874021 原生文档这里:https://www.cnrancher.com/docs/rancher/v2.x/cn/overvi ...
- XBee模块户外通信距离测试
Digi的XBee模块在市面上同类产品中,除了稳定性和可靠性最受推崇外,在距离测试中一般都比竞争对手的产品略胜一筹.户外测试需要注意避免模块自身以外的因素造成的测试结果不理想. 2.4G的模块有Zig ...
- org.apache.commons.httpclient工具类
import org.apache.commons.httpclient.DefaultHttpMethodRetryHandler; import org.apache.commons.httpcl ...