Retrofit研究1
以下为来自Github的retrofit的介绍。话说,翻译还真蛋疼,就这个花了快3个小时。
Retrofit
一个在Android和Java上类型安全的HTTP客户端 介绍
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 可以产生一个同步的或者异步的HTTP请求到远程网络服务器。
Call<List<Repo>> repos = service.listRepos("octocat");
使用注释来描述HTTP请求:
1.支持URL参数替换和查询参数
2.请求body的对象转换(例如JSON,协议buffers)
3.Multipart的请求body和file上传 API描述
在接口方法和它的参数上面的注解暗示了请求怎么处理。 请求方法
每个方法必须有一个提供请求方法和相关URL的HTTP注解。这里有五个内置的注解:GET,POST,PUT,DELETE,和
HEAD.相关资源的URL被指定在注解中。
@GET("users/list")
你也可以在URL中指定查询的参数。
@GET("users/list?sort=desc") URL操作
一个请求的URL可以用替代块和方法中的参数来动态更新。一个替代块是一个由{and}环绕的字母数字字符串。
一个匹配的参数必须使用同样的字符串的 @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请求body
@POST("users/new")
Call<User> createUser(@Body User user);
这个对象可以被Retrofit实例指定的转换者converter来转换。如果没有添加转换者,那么仅仅RequestBody可以被添加。 编码形式和Multipart
方法可以被定义来发送form-encoded和multipart 数据。
当 @FormUrlEncoded出现在方法中编码形式的数据就可以发送。每个键值对被用包含了名字和提供了值的对象的
@Field注解。
@FormUrlEncoded
@POST("user/edit")
Call<User> updateUser(@Field("first_name") String first,@Field("last_name") String last);
当 @Multipart 出现在方法中可以使用Multipart 请求。Parts可以用 @Part注解来声明。
@Multipart
@PUT("user/photo")
Call<User> updateUser(@Part("photo") RequestBody photo,@Part("description") RequestBody description);
Multipart部分使用Retrofit的一个转换器或者它们可以实现RequestBody来处理它们自己的序列化。 头操作(HEADER MANIPULATION)
你可以用 @Headers 注解来给方法设置静态的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);
注意不能每个头部都重写。所有的使用同样名字的头部都将被包含在请求中。
一个请求头可以使用 @Header注解来动态更新。一个匹配的参数是必须要提供 @Header。如果值为null,那么
头将被省略。否则,toString 将会调用这个值,并且使用这个结果。
@GET("user")
Call<User> getUser(@Header("Authorization") String authorization)
需要被添加到每个请求的Header头部可以用OkHttp interceptor插值器来指定。 同步与异步
Call 实例可以被同步或者异步来调用。每个实例仅仅被使用一次,但是呼叫clone()将会在使用的时候创建一个
新的实例。
在Android中,回调将会在main线程中执行。在JVM中,回调将会执行了HTTP请求的同一个线程中发生。 Retrofit配置
Retrofit是一个通过将你的API接口转换成可调用的对象的类。默认地,Retrofit将针对你的平台给你一个健全的
默认配置,但是也允许定制。 转换器
默认的,Retrofit仅仅可以支持反序列化HTTP的Body到OkHttp的ResponseBody类型,而且仅仅只能用 @Body 接受它的
RequestBody类型。
转换器可以被添加支持其它类型。六个同级的模块可以方便适配流行的序列化库。
1.Gson:com.squareup.retrofit2:converter-gson
2.Jackson:com.squareup.retrofit2:converter-jackson
3.Moshi:com.squareup.retrofit2:converter-protobuf
4.Wire:com.squareup.retrofit2:converter-wire
5.Simple XML:com.squareup.retrofit2:converter-simplexml
6.Scalars(原始的primitives,打包的boxed,和字符串String):com.squareup.retrofit2:converter-scalars
这里是一个使用GsonConverterFactory类生成使用了Gson的反序列化的GitHubService接口的实现的例子。
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类创建一个类,并且当
构建你的适配器时传到实例里面去。 MAVEN
<dependency>
<groupId>com.squareup.retrofit2</groupId>
<artifactId>retrofit</artifactId>
<version>(insert latest version)</version>
</dependency> GRADLE
compile 'com.squareup.retrofit2:retrofit:(insert latest version)' Retrofit要求最小Java7或者Android 2.3 混淆
如果你在你的工程中使用混淆器,那么在你的配置中添加下列行:
-dontwarn retrofit2.**
-keep class retrofit2.** { *; }
-keepattributes Signature
-keepattributes Exceptions Apache 版权
Retrofit研究1的更多相关文章
- Retrofit源码研究
2016-05-06 15:35:27 最近抽空研究了一下Retrofit源码,包括API使用.源码结构.使用到的设计模式.SDK的架构设计.作者设计/实现思路等,会形成一系列文章. 以前Retrof ...
- 简单研究下Retrofit
2015-09-24 15:36:26 第一部分: 1. 什么是Retrofit? (点击图片有惊喜) 以上是来自官网的解释,言简意赅,咳咳,我就不翻译了~ 2. 如何使用Retrofit? 2.1 ...
- retrofit一点点理解
retrofit是什么? retrofit可以认为是一款基于http协议的rpc框架.基于java的. 它可以连到支持restful的服务器,将服务器返回的json数据反序列化成java对象. 用途 ...
- 简单研究Loader笔记
2015-11-11 18:25:34 1. Loader是什么? /** * Static library support version of the framework's {@link and ...
- 如何用 Retrofit 2 在安卓上实现 HTTP 访问?
最近,笔者对安卓开发的兴趣愈发浓厚,而且不断尝试了许多传闻很棒的开发库 -- 大部分也真的很不错.于是打算写一个系列文章,介绍使用这些让人惊叹的库建立安卓示例应用的实践.这样,读者可以自行判断,这些库 ...
- RxJava 与 Retrofit 结合的最佳实践
转自:http://gank.io/post/56e80c2c677659311bed9841?from=timeline&isappinstalled=0&nsukey=g1D1Y6 ...
- 又是一个MVP+RxJava+Retrofit的干货集中营
欢迎访问我的个人博客 ,未经允许不得转发 前言 今天想要与大家一起分享的是近一个星期内开发的一个新app--干货集中营客户端,其实网上已经有许多类似的项目,代码家也在他的干货集中营中推荐了几款优秀的作 ...
- Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,RxJava封装,统一对有无网络处理,异常处理, 返回结果问题
本文出处 :Tamic 文/ http://blog.csdn.net/sk719887916/article/details/52132106 Rxjava +Rterofit 需要掌握的几个技巧 ...
- 【转】手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)
1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理! 我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...
随机推荐
- .9.png
.9.png是一种非失真性压缩位图图形文件格式.PNG格式是非失真性压缩的,允许使用类似于GIF格式的调色板技术,支持真彩色图像,并具备阿尔法通道(半透明)等特性.现在有很多人使用PNG格式于互联网及 ...
- Tomcat启动时为什么要配置CATALINA_HOME环境变量??
CATALINA_HOME的值被设为Tomcat的安装目录,如果环境变量CATALINA_HOME已经存在,则通过这个环境变量调用bin目录下的“catalina.bat start”命令 1.Tom ...
- The Donkey of Gui Zhou
Problem Description There was no donkey in the province of Gui Zhou, China. A trouble maker shipped ...
- Html笔记(八)其他标签
<pre></pre> :此标签内封装的文本数据格式将保持原样,包括空格和缩进等格式.常用于页面中显示带有缩进层次的代码. <p></p> :段落标签, ...
- oracle 中v$sqlarea,v$sql,v$session,gv$session,远程连接等问题
一.分析 (1)使用 least recently used (LRU) algorithm 来管理的,不用的自动踢出,可以使用keep 将需要的语句 保存在 library cache中. 所以应该 ...
- 五指CMS发布1.4版本,更多的新功能
五指cms v1.4变更: 新增内容手动分页新增百度地图新增订单管理模块新增订单地址管理增加Microsoft YaHei字体新增推广邀请模块新增私密下载,下载函数 新增百度地图新增筛选功能 修正全局 ...
- 全面产品管理-从细微处认识"用户体验"
转载: 让我以一个故事开始本文,我觉得这个故事能概括大多数人听到“用户体验”这个术语时的想法. 我经常访问的一个财经网站给我发了一封电子邮件,请求我点击里面的一个链接,对一些信息进行审核.所以我就点了 ...
- 电脑IP改变后oracle em无法登陆的解决办法(亲测)
以下方法为本人亲测 情况:假设电脑初次安装oracle时的ip是192.168.133.110 那么进入em的地址就是http://192.168.133.110:1158/em/console/lo ...
- HW5.10
public class Solution { public static void main(String[] args) { int count = 0; for(int i = 1; i < ...
- Linux Shell多进程并发以及并发数控制
1. 基础知识准备 1.1. linux后台进程 Unix是一个多任务系统,允许多用户同时运行多个程序.shell的元字符&提供了在后台运行不需要键盘输入的程序的方法.输入命令后,其后紧跟&a ...