一,简介

Retrofit 是目前使用广泛的 Http Client 框架,它适用于 Android 和 Java。

但需要注意的是,Retrofit 本身并不是一个网络请求框架,而是一个网络请求框架的封装。在 Retrofit 框架中,网络请求不是由 Retrofit 本身来操作的,而是由它的内核(2.x 版本默认内置为 OkHttp)来实现的:

上图就是使用 Retrofit 实现网络请求的流程:

  1. 首先应用层通过 Retrofit 层来封装请求参数,header,url 等信息
  2. Retrofit 通过 OkHttp 来完成后续的请求操作
  3. 服务端处理完请求后,将结果返回给OkHttp层
  4. OkHttp 层再将原始结果返回给 Retrofit 层,Retrofit 根据用户的需求对结果进行解析

Retrofit使得开发者能专注于请求接口的封装工作,网络请求的工作就交给了OkHttp。

二,使用

1. 定义接口

官网上介绍说 “Retrofit turns your HTTP API into a Java interface.”,Retrofit 会将每一个 Http 的 API 请求转化为一个 Java 接口。

结合官网上的示例,我们可以这样理解这句话的含义:

比如我们现在有一个 API 接口地址为:

https://api.github.com/users/zhangsan/repos

那么我们就可以根据这个 API 地址来定义一个 Java 接口,也就是将这个 API 地址抽象成为了一个 Java 接口:

public interface GitHubService {
@GET("users/{user}/repos")
Call<List<Repo>> listRepos(@Path("user") String user);
}

在上面这个定义的接口 GithubService 中,有一个被 @GET 注解标识的 listRepos 方法,它表示的是这个 listRepos 方法是一个 GET 请求,并且这 GET 请求的路径为 “user/{user}repos”。这个路径之后会与创建 Retrofit 对象时填写的 baseUrl 拼接起来,形成一个完整的 API 地址。

{user} 这种写法表示的是这部分内容并不是写死的,相当于占位符的作用,它的实际类型则是 listRepos 方法中的参数 (String user),这里传入的是一个 String 类型的参数。所以 {user} 的实际类型是一个字符串。

那么方法参数前的 @Path 注解又是干什么用的呢?

@Path("user") 是一个参数相关的注解,它的作用是:假如传给 listRepos 方法的参数为 null 的话,那么就会使用 “user” 这个字符串当做为默认值代替传入到请求路径中。

List 则表示的从服务器返回的数据,我们将它定义成了一个实体类

2.创建 Retrofit 对象

Retrofit retrofit = new Retrofit.Builder()
.baseUrl("https://api.github.com/")
.build();

可以看到 Retrofit 的创建是通过一个 Builder 设计模式来实现的,同时需要指定 baseUrl 的值,与之前定义接口时定义的请求路径一起形成完整的请求地址。

3.使用接口创建「请求对象」

创建完 retrofit 对象之后,通过调用它的 create() 方法来创建 GithubService 接口的实例,之后我们就可以使用 service 实例来进行网络请求了。

GithubService service = retrofit.create(GithubService.class);

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

接着调用之前定义好的 GtihubService接口的 listRepos 方法将会返回一个 Call 对象,Call 对象代表了被封装的请求和响应,它与 OkHttp 中的语法类似。

4. 通过 Call 对象来发送网络请求

通过 Call 对象就可以发起同步或者异步的网络请求了。

//发起异步请求
repos.enqueue(new Callback<List<Repo>>() {
@Override
public void onResponse(Call<List<Repo>> call, Response<List<Repo>> response) { }
@Override
public void onFailure(Call<List<Repo>> call, Throwable t) {
}
});

Retrofit 使用简介的更多相关文章

  1. 开源框架相关面试问题-retrofit网络框架面试问题讲解

    retrofit使用简介: 在retrofit中通过一个接口作为Http请求的api接口.注意:@GET("url")中的url只是一个路径,不包含主机号的. 创建一个retrof ...

  2. [旧][Android] Retrofit 源码分析之 Retrofit 对象

    备注 原发表于2016.04.27,资料已过时,仅作备份,谨慎参考 前言 在上一周学习了一下 Retrofit 的执行流程.接下来的文章要更为深入地学习 Retrofit 的各个类,这次我们先学习一下 ...

  3. Retrofit简介与使用方法(翻译)

    简介 Retrofit 是一个Square开发的类型安全的REST安卓客户端请求库.这个库为网络认证.API请求以及用OkHttp发送网络请求提供了强大的框架.Retrofit库让从web api下载 ...

  4. Retrofit 简介 wiki 文档

    简介 Type-safe HTTP client for Android and Java by Square, Inc. GitHub主页:https://github.com/square/ret ...

  5. 【转】GitHub 排名前 100 的安卓、iOS项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  6. GitHub Android Libraries Top 100 简介

    本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过 ...

  7. 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)

    排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者 ...

  8. 64.GitHub 排名前100的android项目简介

    GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...

  9. RxJava简介

    RxJava简介 本文为前段时间学习RxJava时留下的历史遗留笔记,仅作纪念,科学的大神教学帖子在这里-> 给 Android 开发者的 RxJava 详解 通过链式调用序列实现基于事件流的异 ...

随机推荐

  1. opencv3.3.1 + win64 + contrib + cuda 编译

    一 . opencv3.3.1  + win64 + contrib + cuda   编译 1.下载各种依赖 下载安装cuda  https://developer.nvidia.com/cuda- ...

  2. CentOS7安装Docker-CE并部署项目

    前言 这是我第一次使用dokcer部署项目,现学现卖.成功之后把所有用到的安装及部署和操作命令做一个总结.如有不足,请指教. 使用的是阿里云服务器.CentOS7版本. Dokcer安装 1.Cent ...

  3. 记项目管理大作业Web项目Mandrian的全流程[其一] 整体分析: 功能划分, 组织结构

    Mandrian是个图书管理系统, 具体需求老师给出 这个项目的目的主要是管理过程和高层设计的学习和实践 11人小组, 路人局 成员调查 这里由于很多人我都不认识, 所以我提前发了一个能力调查表, 调 ...

  4. eclipse 导入外面的jar

    Eclipse中导入外部jar包 听语音 | 浏览:52620 | 更新:2014-12-07 20:59 | 标签:eclipse 1 2 3 4 5 6 7 分步阅读 在编写java代码时,为方便 ...

  5. SQL语句复习【专题二】

    SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数  ...

  6. redis编译和安装出现错误

    redis编译到时候出现错误,记录一下原因 1.下载redis,https://redis.io/download ,一般选择稳定版本,稳定版的版本号是偶数,当前最新版本是5.0.4,Linux可直接 ...

  7. 3.NumPy - 数组属性

    1.ndarray.shape 这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小 # -*- coding: utf-8 -*- import numpy as np a = np.a ...

  8. 从n个数里面找最大的两个数理论最少需要比较

    答案是:n+logn-2 过程是这样的: 甲乙比甲胜出,丙丁比丙胜出,最后甲丙比较,甲胜出...容易得出找出最大数为n-1次. 现在开始找出第二大的数字:明显,第二大的数字,一定和甲进行过比较.... ...

  9. linux基础—课堂随笔08_进程(转)

    进程优先级 命令 pstree -p 显示各个子线程 ps 进程状态(process state) UNIX风格:ps -ef BSD风格:ps aux 还有用到o参数,选项显示定制的信息: pid. ...

  10. 9.RNN应用

    import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.mode ...