Retrofit--官网2.1.0

android
Retrofit

介绍


RetrofitHTTP API 转换为 Java 的接口:

  1. public interface GitHubService { 

  2. @GET("users/{user}/repos") 

  3. Call<List<Repo>> listRepos(@Path("user") String user); 



使用 Retrofit 类生成 GitHubService 的实例:

  1. Retrofit retrofit = new Retrofit.Builder() 

  2. .baseUrl("https://api.github.com/") 

  3. .build(); 


  4. GitHubService service = retrofit.create(GitHubService.class); 

GitHubService 实例上的每次调用都会产生一个到远程服务的同步、或异步的 HTTP 的请求:

  1. Call<List<Repo>> repos = service.listRepos("octocat"); 

使用注解描述 HTTP 请求:

  • 支持 URL 参数的占位符,支持请求参数

  • 对象和 response body 的转换(例如:JSON 等)

  • Multipart 请求体和文件上传

API 描述


接口方法和参数上的注解标识了如何处理一个请求。

请求方法


每个方法必须使用一个注解来提供请求类型和相对 URL 地址。请求类型注解一共有五个:GETPOSTPUTDELETEHEAD。注解中也可以指定相对的 URL 地址:

  1. @GET("users/list") 

URL 中,也可以指定查询参数:

  1. @GET("users/list?sort=desc") 

URL 处理


请求的 URL 中,可以使用占位符块和方法中的参数,对 URL 进行动态的更新。一个占位符块就是在 {} 之间包含的数字和字母。必须使用同样的数字和字母,使用 @Path 注解来申明相应的参数:

  1. @GET("group/{id}/users") 

  2. Call<List<User>> groupList(@Path("id") int groupId); 

当然,也可以添加查询参数:

  1. @GET("group/{id}/users") 

  2. Call<List<User>> groupList(@Path("id") int groupId, @Query("sort") String sort); 

复杂的查询参数(例如 Map 类型)的示例:

  1. @GET("group/{id}/users") 

  2. Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options); 

请求体


可以使用 @Body 注解来把一个对象指定为 HTTPBODY

  1. @GET("group/{id}/users") 

  2. Call<List<User>> groupList(@Path("id") int groupId, @QueryMap Map<String, String> options); 

也可以通过给 Retrofit 的实例指定转换器的方式对对象进行转换。如果没有添加转换器,仅能使用 RequestBody

表单的 ENCODED 和 MULTIPART


也可以申明方法来发送 form-encodedmultipart 的数据。

当方法上存在 @FormUrlEncoded 注解时,就会发送 form-encoded 的数据。@Filed 包含了键值对的键名称,后面的对象提供了键值对的值:

  1. @FormUrlEncoded 

  2. @POST("user/edit") 

  3. Call<User> updateUser(@Field("first_name") String first, @Field("last_name") String last); 

当方法上存在 @Multipart 注解时,就会发送 multipart 的数据,各部分使用 @Part 注解进行申明:

  1. @Multipart 

  2. @PUT("user/photo") 

  3. Call<User> updateUser(@Part("photo") RequestBody photo, @Part("description") RequestBody description); 

multipart 的各部分要么使用 Retrofit 的转换器,要么实现 RequestBody,用这样的方式来实现各自的序列化。

HEADER 处理


可以使用 @Headers 注解来为某个方法设置静态的头:

  1. @Headers("Cache-Control: max-age=640000") 

  2. @GET("widget/list") 

  3. Call<List<Widget>> widgetList(); 

  1. @Headers({ 

  2. "Accept: application/vnd.github.v3.full+json", 

  3. "User-Agent: Retrofit-Sample-App" 

  4. }) 

  5. @GET("users/{username}") 

  6. Call<User> getUser(@Path("username") String username); 

注意:header中的各个部分不能相互覆盖。所有相同名称的header都会被包含在请求中。

也可以使用 @Header 注解对头部内容进行动态的更新。对应的参数必须由 @Header 进行提供。如果值为 null,那么将被忽略。如果不为 null,值将会使用 toString() 方法,最终使用 toString() 方法返回的值:

  1. @GET("user") 

  2. Call<User> getUser(@Header("Authorization") String authorization) 

如果要给每个请求都添加头部,那么,可以使用 OkHttp interceptor 进行指定。

同步 VS 异步


Call 对象的实例上,即可以使用同步,也可以使用异步。它的每个实例只能使用一次,使用 clone() 方法就可以创建一个新的实例来使用。

Android 中,回调方法会在主线程中执行。在 JVM 中,回调将和执行 HTTP 请求发生在同一线程。

Retrofit 配置


默认地,Retrofit 有健全的默认值,但是,也可以自定义配置。

转换器


默认地,Retrofit 只会把 HTTP body 的内容反序列化到 OKHttpResponseBody 类型中,并且它只接收用 @Body 标注的 RequestBody 类型。

要支持其它的类型,可以添加转换器。为了方便起见,为了适配一些流行的序列化库,Retrofit 已经提供了六个模块:

  • Gson: com.squareup.retrofit2:converter-gson

  • Jackson: com.squareup.retrofit2:converter-jackson

  • Moshi: com.squareup.retrofit2:converter-moshi

  • Protobuf: com.squareup.retrofit2:converter-protobuf

  • Wire: com.squareup.retrofit2:converter-wire

  • Simple XML: com.squareup.retrofit2:converter-simplexml

  • Scalars (primitives, boxed, and String): com.squareup.retrofit2:converter-scalars

下面的示例中,使用 GsonConverterFactory 类来生成 GitHubService 的实现,该实现使用 Gson 作为反序列化的工具:

  1. Retrofit retrofit = new Retrofit.Builder() 

  2. .baseUrl("https://api.github.com") 

  3. .addConverterFactory(GsonConverterFactory.create()) 

  4. .build(); 


  5. GitHubService service = retrofit.create(GitHubService.class); 

自定义转换器


如果你需要与之通信的 API 使用了 Retrofit 不支持的内容格式(例如:YAML,文本,自定义格式等),或者你想使用一个其它的库来实现一个已经存在的格式,那么,就需要创建自己的转换器,这是一件非常简单的事情。创建一个类继承 Converter.Factory 类,然后,在构建适配器时,把它传给实例就可以了。

下载

2.1.0版本官方下载

使用 maven


  1. <dependency> 

  2. <groupId>com.squareup.retrofit2</groupId> 

  3. <artifactId>retrofit</artifactId> 

  4. <version>2.1.0</version> 

  5. </dependency> 

使用 Gradle


  1. compile 'com.squareup.retrofit2:retrofit:2.1.0' 

注意:Retrofit 需要 Java 7 及以上,Android 2.3 及以上

PROGUARD


如果项目使用了 Proguard,需要把下面的内容添加到项目的配置中:

  1. # Platform calls Class.forName on types which do not exist on Android to determine platform. 

  2. -dontnote retrofit2.Platform 

  3. # Platform used when running on RoboVM on iOS. Will not be used at runtime. 

  4. -dontnote retrofit2.Platform$IOS$MainThreadExecutor 

  5. # Platform used when running on Java 8 VMs. Will not be used at runtime. 

  6. -dontwarn retrofit2.Platform$Java8 

  7. # Retain generic type information for use by reflection by converters and adapters. 

  8. -keepattributes Signature 

  9. # Retain declared checked exceptions for use by a Proxy instance. 

  10. -keepattributes Exceptions 

Retrofit--官网2.1.0的更多相关文章

  1. [ActionScript 3.0] Away3D 官网实例

    /* Dynamic tree generation and placement in a night-time scene Demonstrates: How to create a height ...

  2. vue2.0实践 —— Node + vue 实现移动官网

    简介 使用 Node + vue 对公司的官网进行了一个简单的移动端的实现. 源码 https://github.com/wx1993/node-vue-fabaocn 效果 组件 轮播图(使用 vu ...

  3. i春秋官网4.0上线啦 文末有福利

    爱瑞宝地(Everybody)期待了很久的 i春秋官网4.0上线啦 除了产品的功能更加完善 性能和体验也将大幅度提高 清新.舒适的视觉感受 搭配更加便捷的操作流程 只需一秒,扫码立即登录 即刻进入网络 ...

  4. Navicat Premium 简体中文版 12.0.16 以上版本国外官网下载地址(非国内)

    国内Navicat网址是:http://www.navicat.com.cn 国外Navicat网址是:http://www.navicat.com 国外的更新比国内的快,而且同一个版本,国内和国外下 ...

  5. 使用 php 7.3.0 官网的压缩包安装 FastAdmin

    使用 php 7.3.0 官网的压缩包安装 FastAdmin 直接从 php.net 官网下载了一 php7.3.0 的压缩包,解压到 c:/temp/php73 目录. 将 c:/temp/php ...

  6. 【转】MyEclipse 9.0正式版官网下载(附Win+Llinux激活方法、汉化包)

    MyEclipse 9.0 经过 M1,M2,终于出了正式版(MyEclipse For Spring 还是 8.6.1).该版本集成了 Eclipse 3.6.1,支持 HTML5 和 JavaEE ...

  7. 从谷歌官网下载android 6.0源码、编译并刷入nexus 6p手机

    版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.net/fuchaosz/article/details/52473660 1 前言 经过一周的奋战,终于从谷 ...

  8. 2022年官网下安装Logstash最全版与官网查阅方法(8.1.0最新安装)

    一.环境整合 构建工具(参考工具部署方式) 软件名称 版本 相关文章推荐 NodeJS 16.0.0 https://www.cnblogs.com/liuyangfirst/p/15998172.h ...

  9. 2022年官网下安装Elasticsearch最全版与官网查阅方法(8.1.0最新安装)

    目录 一.环境整合(需要提前装好) 构建工具(参考工具部署方式) 二.官方下载Elasticsearch部署安装 1.百度搜索"Elasticsearch",或者访问官网https ...

  10. 0. 资料官网【从零开始学Spring Boot】

    [视频&交流平台] àSpringBoot视频 http://study.163.com/course/introduction.htm?courseId=1004329008&utm ...

随机推荐

  1. arithmetic-slices

    https://leetcode.com/problems/arithmetic-slices/ public class Solution { public int numberOfArithmet ...

  2. WINXP上安装及使用SqlMap之方法

    1.首先下载SqlMap 点击下载.2.其次下载用于Windows系统的Python ……点击这里…… 3.然后安装Python:Python默认安装的路径是“C:\Python”(你也可以修改安装路 ...

  3. Eclipse代码布局怎么使用退格和缩进快捷键?

    Eclipse代码布局怎么使用退格和缩进快捷键? 好的程序,不仅要运行快速准确,而且还要易于理解.研究表明,清晰的代码布局可以提高程序猿的理解能力.何为代码布局?其实就是代码的缩进.留白等.为了保证清 ...

  4. css border-sizing 用法与理解

    浏览器支持 IE Firefox Chrome Safari Opera  支持  支持  支持  支持  支持 Internet Explorer.Opera 以及 Chrome 支持 box-si ...

  5. 《大规模web服务开发技术》笔记

    前段时间趁空把<大规模web服务开发技术>这本书看完了,今天用一下午时间重新翻了一遍,把其中的要点记了下来,权当复习和备忘.由于自己对数据压缩.全文检索等还算比较熟,所以笔记内容主要涉及前 ...

  6. idea 设置jetty进程jvm参数

    /** * MyEclipse6.5通过Jetty跑Web应用时提示OutOfMemoryError: PermGen space的解决办法 * @see ---------------------- ...

  7. RocketMQ 拉取消息-通信模块

    首先看server端:class NettyRemotingServer extends NettyRemotingAbstract implements RemotingServer 下面这个实现了 ...

  8. 算法笔记_095:蓝桥杯练习 拿糖果(Java)

    目录 1 问题描述 2 解决方案   1 问题描述 问题描述 妈妈给小B买了N块糖!但是她不允许小B直接吃掉. 假设当前有M块糖,小B每次可以拿P块糖,其中P是M的一个不大于根号下M的质因数.这时,妈 ...

  9. vs2017安装过程问题及解决方法

    1. 问题:C++ 无法打开 源 文件 "errno.h"等文件 解决方法:https://jingyan.baidu.com/article/8ebacdf0167b2249f6 ...

  10. Java 连接 Oracle 数据库

    首先要导入ojdbc6.jar 包(放在lib文件夹) 然后需要在数据库建一个student表进行测试: 连接及测试代码: import java.security.interfaces.RSAKey ...