Retrofit 使用简介
一,简介
Retrofit 是目前使用广泛的 Http Client 框架,它适用于 Android 和 Java。
但需要注意的是,Retrofit 本身并不是一个网络请求框架,而是一个网络请求框架的封装。在 Retrofit 框架中,网络请求不是由 Retrofit 本身来操作的,而是由它的内核(2.x 版本默认内置为 OkHttp)来实现的:
上图就是使用 Retrofit 实现网络请求的流程:
- 首先应用层通过 Retrofit 层来封装请求参数,header,url 等信息
- Retrofit 通过 OkHttp 来完成后续的请求操作
- 服务端处理完请求后,将结果返回给OkHttp层
- 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 使用简介的更多相关文章
- 开源框架相关面试问题-retrofit网络框架面试问题讲解
retrofit使用简介: 在retrofit中通过一个接口作为Http请求的api接口.注意:@GET("url")中的url只是一个路径,不包含主机号的. 创建一个retrof ...
- [旧][Android] Retrofit 源码分析之 Retrofit 对象
备注 原发表于2016.04.27,资料已过时,仅作备份,谨慎参考 前言 在上一周学习了一下 Retrofit 的执行流程.接下来的文章要更为深入地学习 Retrofit 的各个类,这次我们先学习一下 ...
- Retrofit简介与使用方法(翻译)
简介 Retrofit 是一个Square开发的类型安全的REST安卓客户端请求库.这个库为网络认证.API请求以及用OkHttp发送网络请求提供了强大的框架.Retrofit库让从web api下载 ...
- Retrofit 简介 wiki 文档
简介 Type-safe HTTP client for Android and Java by Square, Inc. GitHub主页:https://github.com/square/ret ...
- 【转】GitHub 排名前 100 的安卓、iOS项目简介
GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...
- GitHub Android Libraries Top 100 简介
本项目主要对目前 GitHub 上排名前 100 的 Android 开源库进行简单的介绍, 至于排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过 ...
- 2016年GitHub 排名前 100 的安卓、iOS项目简介(收藏)
排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不相关的项目, 所以排名并不具备任何官方效力, 仅供参考学习, 方便初学者 ...
- 64.GitHub 排名前100的android项目简介
GitHub Android Libraries Top 100 简介 排名完全是根据 GitHub 搜索 Java 语言选择 (Best Match) 得到的结果, 然后过滤了跟 Android 不 ...
- RxJava简介
RxJava简介 本文为前段时间学习RxJava时留下的历史遗留笔记,仅作纪念,科学的大神教学帖子在这里-> 给 Android 开发者的 RxJava 详解 通过链式调用序列实现基于事件流的异 ...
随机推荐
- opencv3.3.1 + win64 + contrib + cuda 编译
一 . opencv3.3.1 + win64 + contrib + cuda 编译 1.下载各种依赖 下载安装cuda https://developer.nvidia.com/cuda- ...
- CentOS7安装Docker-CE并部署项目
前言 这是我第一次使用dokcer部署项目,现学现卖.成功之后把所有用到的安装及部署和操作命令做一个总结.如有不足,请指教. 使用的是阿里云服务器.CentOS7版本. Dokcer安装 1.Cent ...
- 记项目管理大作业Web项目Mandrian的全流程[其一] 整体分析: 功能划分, 组织结构
Mandrian是个图书管理系统, 具体需求老师给出 这个项目的目的主要是管理过程和高层设计的学习和实践 11人小组, 路人局 成员调查 这里由于很多人我都不认识, 所以我提前发了一个能力调查表, 调 ...
- eclipse 导入外面的jar
Eclipse中导入外部jar包 听语音 | 浏览:52620 | 更新:2014-12-07 20:59 | 标签:eclipse 1 2 3 4 5 6 7 分步阅读 在编写java代码时,为方便 ...
- SQL语句复习【专题二】
SQL语句复习[专题二] 单行函数(日期.数学.字符串.通用函数.转换函数)多行函数.分组函数.多行数据计算一个结果.一共5个.sum(),avg(),max(),min(),count()分组函数 ...
- redis编译和安装出现错误
redis编译到时候出现错误,记录一下原因 1.下载redis,https://redis.io/download ,一般选择稳定版本,稳定版的版本号是偶数,当前最新版本是5.0.4,Linux可直接 ...
- 3.NumPy - 数组属性
1.ndarray.shape 这一数组属性返回一个包含数组维度的元组,它也可以用于调整数组大小 # -*- coding: utf-8 -*- import numpy as np a = np.a ...
- 从n个数里面找最大的两个数理论最少需要比较
答案是:n+logn-2 过程是这样的: 甲乙比甲胜出,丙丁比丙胜出,最后甲丙比较,甲胜出...容易得出找出最大数为n-1次. 现在开始找出第二大的数字:明显,第二大的数字,一定和甲进行过比较.... ...
- linux基础—课堂随笔08_进程(转)
进程优先级 命令 pstree -p 显示各个子线程 ps 进程状态(process state) UNIX风格:ps -ef BSD风格:ps aux 还有用到o参数,选项显示定制的信息: pid. ...
- 9.RNN应用
import numpy as np from keras.datasets import mnist from keras.utils import np_utils from keras.mode ...