以下为来自Github的retrofit的介绍。话说,翻译还真蛋疼,就这个花了快3个小时。

  1. Retrofit
  2. 一个在AndroidJava上类型安全的HTTP客户端
  3.  
  4. 介绍
  5. Retrofit可以把你的HTTP API转换成java接口。
  6. public interface GitHubService {
  7. @GET("users/{user}/repos")
  8. Call<List<Repo>> listRepos(@Path("user") String user);
  9. }
  10. Retrofit类实现GitHubService接口的实现。
  11. Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com").build();
  12. GitHubService service = retrofit.create(GitHubService.class);
  13. 创建的GitHubService的每个 Call 可以产生一个同步的或者异步的HTTP请求到远程网络服务器。
  14. Call<List<Repo>> repos = service.listRepos("octocat");
  15. 使用注释来描述HTTP请求:
  16. 1.支持URL参数替换和查询参数
  17. 2.请求body的对象转换(例如JSON,协议buffers)
  18. 3.Multipart的请求bodyfile上传
  19.  
  20. API描述
  21. 在接口方法和它的参数上面的注解暗示了请求怎么处理。
  22.  
  23. 请求方法
  24. 每个方法必须有一个提供请求方法和相关URLHTTP注解。这里有五个内置的注解:GET,POST,PUT,DELETE,和
  25. HEAD.相关资源的URL被指定在注解中。
  26. @GET("users/list")
  27. 你也可以在URL中指定查询的参数。
  28. @GET("users/list?sort=desc")
  29.  
  30. URL操作
  31. 一个请求的URL可以用替代块和方法中的参数来动态更新。一个替代块是一个由{and}环绕的字母数字字符串。
  32. 一个匹配的参数必须使用同样的字符串的 @Path来注解。
  33. @GET("group/{id}/users")
  34. Call<List<User>> groupList(@Path("id") int groupId);
  35. 也可以添加查询参数
  36. @GET("group/{id}/users")
  37. Call<List<User>> groupList(@Path("id") int groupId,@Query("sort") String sort);
  38. 复杂的查询参数可以用一个组合的Map.
  39. @GET("group/{id}/users")
  40. Call<List<User>> groupList(@Path("id") int groupId),@QueryMap Map<String,String> options);
  41.  
  42. 请求块
  43. 一个对象可以指定成一个用 @Body注解的HTTP请求body
  44. @POST("users/new")
  45. Call<User> createUser(@Body User user);
  46. 这个对象可以被Retrofit实例指定的转换者converter来转换。如果没有添加转换者,那么仅仅RequestBody可以被添加。
  47.  
  48. 编码形式和Multipart
  49. 方法可以被定义来发送form-encodedmultipart 数据。
  50. @FormUrlEncoded出现在方法中编码形式的数据就可以发送。每个键值对被用包含了名字和提供了值的对象的
  51. @Field注解。
  52. @FormUrlEncoded
  53. @POST("user/edit")
  54. Call<User> updateUser(@Field("first_name") String first,@Field("last_name") String last);
  55. @Multipart 出现在方法中可以使用Multipart 请求。Parts可以用 @Part注解来声明。
  56. @Multipart
  57. @PUT("user/photo")
  58. Call<User> updateUser(@Part("photo") RequestBody photo,@Part("description") RequestBody description);
  59. Multipart部分使用Retrofit的一个转换器或者它们可以实现RequestBody来处理它们自己的序列化。
  60.  
  61. 头操作(HEADER MANIPULATION)
  62. 你可以用 @Headers 注解来给方法设置静态的headers
  63. @Headers("Cache-Control:max-age=640000")
  64. @GET("widget/list")
  65. Call<List<Widget>> widgetList();
  66.  
  67. @Headers({
  68. "Accept: application/vnd.github.v3.full+json",
  69. "User-Agent: Retrofit-Sample-App"
  70. })
  71. @GET("users/{username}")
  72. Call<User> getUser(@Path("username") String username);
  73. 注意不能每个头部都重写。所有的使用同样名字的头部都将被包含在请求中。
  74. 一个请求头可以使用 @Header注解来动态更新。一个匹配的参数是必须要提供 @Header。如果值为null,那么
  75. 头将被省略。否则,toString 将会调用这个值,并且使用这个结果。
  76. @GET("user")
  77. Call<User> getUser(@Header("Authorization") String authorization)
  78. 需要被添加到每个请求的Header头部可以用OkHttp interceptor插值器来指定。
  79.  
  80. 同步与异步
  81. Call 实例可以被同步或者异步来调用。每个实例仅仅被使用一次,但是呼叫clone()将会在使用的时候创建一个
  82. 新的实例。
  83. Android中,回调将会在main线程中执行。在JVM中,回调将会执行了HTTP请求的同一个线程中发生。
  84.  
  85. Retrofit配置
  86. Retrofit是一个通过将你的API接口转换成可调用的对象的类。默认地,Retrofit将针对你的平台给你一个健全的
  87. 默认配置,但是也允许定制。
  88.  
  89. 转换器
  90. 默认的,Retrofit仅仅可以支持反序列化HTTPBodyOkHttpResponseBody类型,而且仅仅只能用 @Body 接受它的
  91. RequestBody类型。
  92. 转换器可以被添加支持其它类型。六个同级的模块可以方便适配流行的序列化库。
  93. 1.Gson:com.squareup.retrofit2:converter-gson
  94. 2.Jackson:com.squareup.retrofit2:converter-jackson
  95. 3.Moshi:com.squareup.retrofit2:converter-protobuf
  96. 4.Wire:com.squareup.retrofit2:converter-wire
  97. 5.Simple XML:com.squareup.retrofit2:converter-simplexml
  98. 6.Scalars(原始的primitives,打包的boxed,和字符串String):com.squareup.retrofit2:converter-scalars
  99. 这里是一个使用GsonConverterFactory类生成使用了Gson的反序列化的GitHubService接口的实现的例子。
  100. Retrofit retrofit = new Retrofit.Builder().baseUrl("https://api.github.com").addConverterFactory(
  101. GsonConverterFactory.create()).build();
  102. GitHubService service = retrofit.create(GitHubService.class);
  103.  
  104. 定制的转换器
  105. 如果你需要和使用了Retrofit不支持的内容格式(例如YAMLtxt,定制的格式)的API交流或者你希望使用不同的库
  106. 来实现一个存在的格式,那么你可以轻易地创建你自己的转换器。通过继承Converter.Factory类创建一个类,并且当
  107. 构建你的适配器时传到实例里面去。
  108.  
  109. MAVEN
  110. <dependency>
  111. <groupId>com.squareup.retrofit2</groupId>
  112. <artifactId>retrofit</artifactId>
  113. <version>(insert latest version)</version>
  114. </dependency>
  115.  
  116. GRADLE
  117. compile 'com.squareup.retrofit2:retrofit:(insert latest version)'
  118.  
  119. Retrofit要求最小Java7或者Android 2.3
  120.  
  121. 混淆
  122. 如果你在你的工程中使用混淆器,那么在你的配置中添加下列行:
  123. -dontwarn retrofit2.**
  124. -keep class retrofit2.** { *; }
  125. -keepattributes Signature
  126. -keepattributes Exceptions
  127.  
  128. Apache 版权

Retrofit研究1的更多相关文章

  1. Retrofit源码研究

    2016-05-06 15:35:27 最近抽空研究了一下Retrofit源码,包括API使用.源码结构.使用到的设计模式.SDK的架构设计.作者设计/实现思路等,会形成一系列文章. 以前Retrof ...

  2. 简单研究下Retrofit

    2015-09-24 15:36:26 第一部分: 1. 什么是Retrofit? (点击图片有惊喜) 以上是来自官网的解释,言简意赅,咳咳,我就不翻译了~ 2. 如何使用Retrofit? 2.1 ...

  3. retrofit一点点理解

    retrofit是什么? retrofit可以认为是一款基于http协议的rpc框架.基于java的. 它可以连到支持restful的服务器,将服务器返回的json数据反序列化成java对象. 用途 ...

  4. 简单研究Loader笔记

    2015-11-11 18:25:34 1. Loader是什么? /** * Static library support version of the framework's {@link and ...

  5. 如何用 Retrofit 2 在安卓上实现 HTTP 访问?

    最近,笔者对安卓开发的兴趣愈发浓厚,而且不断尝试了许多传闻很棒的开发库 -- 大部分也真的很不错.于是打算写一个系列文章,介绍使用这些让人惊叹的库建立安卓示例应用的实践.这样,读者可以自行判断,这些库 ...

  6. RxJava 与 Retrofit 结合的最佳实践

    转自:http://gank.io/post/56e80c2c677659311bed9841?from=timeline&isappinstalled=0&nsukey=g1D1Y6 ...

  7. 又是一个MVP+RxJava+Retrofit的干货集中营

    欢迎访问我的个人博客 ,未经允许不得转发 前言 今天想要与大家一起分享的是近一个星期内开发的一个新app--干货集中营客户端,其实网上已经有许多类似的项目,代码家也在他的干货集中营中推荐了几款优秀的作 ...

  8. Rxjava +Retrofit 你需要掌握的几个技巧,Retrofit缓存,RxJava封装,统一对有无网络处理,异常处理, 返回结果问题

    本文出处 :Tamic 文/ http://blog.csdn.net/sk719887916/article/details/52132106 Rxjava +Rterofit 需要掌握的几个技巧 ...

  9. 【转】手把手教你读取Android版微信和手Q的聊天记录(仅作技术研究学习)

    1.引言 特别说明:本文内容仅用于即时通讯技术研究和学习之用,请勿用于非法用途.如本文内容有不妥之处,请联系JackJiang进行处理!   我司有关部门为了获取黑产群的动态,有同事潜伏在大量的黑产群 ...

随机推荐

  1. 处理.NET中的内存泄露

    Fabrice Marguerie是一位软件架构师和咨询师,他在MSDN发表了如何检测和避免.NET程序内存与资源泄漏的文章.此文章描述了编写.NET程序时可能发生的内存与资源泄漏,以及如何避免这些泄 ...

  2. 关于 UGUI 字体花屏或乱码。

    我们项目从某个时候开始ui突然开始出现字体花屏现象(unity 开发版本:5.3.6p6),而且很难必现却又时有发生,确实查找和解决起来不太容易. 关于这个问题,uwa官方给出了解释,http://b ...

  3. [TSOI2005]Exhibit

    问题描述 博览馆正在展出由世上最佳的 M 位画家所画的图画. wangjy 想到博览馆去看这几位大师的作品. 可是,那里的博览馆有一个很奇怪的规定,就是在购买门票时必须说明两个数字, a 和 b ,代 ...

  4. Java笔记(十二)……类中各部分加载顺序及存放位置问题

    什么时候会加载类 使用到类中的内容时加载,三种情况: 创建对象:new StaticDemo(); 使用类中的静态成员:StaticCode.num = 9;  StaticCode.getNum() ...

  5. 创建二叉树,C语言实现

    一.前序遍历创建二叉树,使用递归,头文件 BiTree.h /*槽点一:创建树时用scanf输入不成功*/ #ifndef BITREE_H #define BITREE_H #include< ...

  6. 综合而强大的DATASNAP

    从DELPHI2009开始,DATASNAP技术上完全是全新的架构,多层架构不再基于微软的COM,摆脱COM就等于摆脱了WINDOWS的束缚. TCP/IP通信不再需要先开启scktsrvr.exe程 ...

  7. Powerdesigner设置name与code不同时变化

    Tools-General Options-Dialog Name to Code mirroring去掉对勾

  8. 冒泡排序和快速排序的java实现

    转发请注明原创地址 http://www.cnblogs.com/dongxiao-yang/p/6264831.html 冒泡 public static int[] bubble_sort(int ...

  9. Mysql相关问答

    问:我们团队中的一人想要使用 bigint 字段类型来代替 25-30 长度的 varchar 类型来存储 CRC64 数据,然后将索引也改成 bigint 的索引,这会节省索引的空间.请问这否是合理 ...

  10. CoreLocation框架的使用

    CoreLocation框架使用 一.地图和定位的简介 1.应用场景 周边:找餐馆/找KTV/找电影院(团购APP) 导航:根据用户设定的起点和终点,进行路线规划,并指引用户如何到达(地图APP) 2 ...