Android 开发 框架系列 OkHttp拦截器
前言
此篇博客只讲解okhttp的拦截器功能的详细使用,如果你还不太了解okhttp可以参考我另外一篇博客 Android 开发 框架系列 OkHttp使用详解
添加Interceptor的简单例子
在 Android 开发 框架系列 OkHttp使用详解 可以了解到okhttp的基本使用,初始化OkHttpClient的时候我们可以添加拦截器,如下:
// 配置一些信息进入OkHttpClient
mOkHttpClient = new OkHttpClient().newBuilder()
.connectTimeout(REQUEST_TIME, TimeUnit.SECONDS)
.readTimeout(REQUEST_TIME, TimeUnit.SECONDS)
.writeTimeout(REQUEST_TIME, TimeUnit.SECONDS)
.addInterceptor(newMyInterceptor())
.build();
如上代码,很简单,只要利用addInterceptor方法就可以添加拦截器,而自定义的拦截器只需要实现Interceptor接口就行了,如下所示:
public class MyInterceptor implements Interceptor {
...
}
在有简单的了解后,我们来讲解拦截器的一些使用情景.
修改header头部信息
在一些接口需要增加头部信息或者修改头部信息的时候,如果我们直接对Request请求里增加头部字段难免会有增加耦合的问题.而在拦截器里修改就可以避免严重的耦合,如下代码增加了Body的类型与token信息.
public class HttpHeaderInterceptor implements Interceptor {
private String token;
public HttpHeaderInterceptor(String token) {
this.token = token;
}
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
// 配置请求头
String accessToken = "token";
Request.Builder builder = chain.request().newBuilder();
builder.header("Content-Type", "application/json") //增加body类型
.header("Accept", "application/json");
builder.header(accessToken, token); //增加token
Request request = builder.build();
return chain.proceed(request); //继续发送
}
}
拦截取消请求
public class HttpHeaderInterceptor implements Interceptor {
private String token;
public HttpHeaderInterceptor(String token) {
this.token = token;
}
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
// 配置请求头
if (TextUtils.isEmpty(token)){
chain.call().cancel();
return null;
}
//略......
}
}
网络日志拦截
请注意! 如果你OkHttpClient需要用于下载文件请不要添加网络日志拦截,否则会影响流的回调
使用okhttp网络日志拦截器需添加以下依赖:
implementation 'com.squareup.okhttp3:logging-interceptor:3.6.0'
定义拦截器中的网络日志工具:
HttpLoggingInterceptor logInterceptor = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() {
@Override
public void log(String message) {
Log.d("logInterceptor", message);
}
});
logInterceptor.setLevel(HttpLoggingInterceptor.Level.BODY); //设置拦截器,不要忘记设置日志的级别,否则会不回调数据
初始化OkHttpClient,并添加网络日志拦截器:
mOkHttpClient = new OkHttpClient.Builder()
.addInterceptor(logInterceptor) //设置拦截器
.build();
Android 开发 框架系列 OkHttp拦截器的更多相关文章
- Android 开发 框架系列 OkHttp使用详解
简介 okhttp是一个第三方类库,用于android中请求网络.这是一个开源项目,是安卓端最火热的轻量级框架,由移动支付Square公司贡献(该公司还贡献了Picasso和LeakCanary) . ...
- Android 开发 框架系列 OkHttp文件上传功能实现(含断点续传)
前言 此篇博客只是上传功能的记录demo,如果你还不太了解okhttp可以参考我的另一篇博客https://www.cnblogs.com/guanxinjing/p/9708575.html 代码部 ...
- Android 开发 框架系列 OkHttp文件下载功能实现(含断点续传)
前言 此篇博客只是下载功能的记录demo,如果你还不太了解okhttp可以参考我的另一篇博客https://www.cnblogs.com/guanxinjing/p/9708575.html 代码部 ...
- Android 开发 框架系列 Google的ORM框架 Room
目录 简介 导入工程 使用流程概况 一个简单的小Demo 深入学习 @Entity使用 自定义表名 tableName 自定义字段名@ColumnInfo 主键 @PrimaryKey 索引 @In ...
- android 开发 框架系列 使用 FileDownloader 实现检查更新的功能class
首先介绍一下FileDownloader GH :https://github.com/lingochamp/FileDownloader/blob/master/README-zh.md FileD ...
- Android 开发 框架系列 百度语音合成
官方文档:http://ai.baidu.com/docs#/TTS-Android-SDK/6d5d6899 官方百度语音合成控制台:https://cloud.baidu.com/product/ ...
- Android 开发 框架系列 EventBus 事件总线
介绍 GitHub:https://github.com/greenrobot/EventBus 先聊聊EventBus 线程总线是干什么的,使用环境,优点.缺点. 干什么的? 一句话,简单统一数据传 ...
- Android 开发 框架系列 glide-transformations 图片处理基本使用
首先简单的介绍一下Gilde作用范围.Gilde功能十分强大,它可以实现图片处理.图片本地加载.图片网络加载.位图加载.图片内存缓存.图片磁盘缓存.Gif图片加载.使用简单轻松,轻松的后是它强大的心, ...
- Android 开发 框架系列 Android-Universal-Image-Loader 图片加载使用demo
Android-Universal-Image-Loader github地址:https://github.com/nostra13/Android-Universal-Image-Loader 加 ...
随机推荐
- D题 Robots 【期望】
Robots Given a directed graph with no loops which starts at node 11 and ends at node nn.There is a r ...
- Unity3D中动态创建编辑轴(点,线,圆,圆锥)
问题分析: 最近在搞软件底层开发,将一些工具或者底层脚本打成dll导入unity使用,有这样一需求,就是编辑功能,需要像Scene场景一样,实现那种编辑轴 实现方式: 创建Mesh,构建编辑轴,这个地 ...
- 前端 Vue
0.渐进式 JavaScript 框架 通过对框架的了解与运用程度,来决定其在整个项目中的应用范围,最终可以独立以框架方式完成整个web前端项目 一.Vue介绍 1.什么是Vue 可以独立完成前后端分 ...
- 用sql语句合并工作表
Sub 工作表合并() f = Application.GetOpenFilename(filefilter:="excel文件,*xlsx", Title:="请选择文 ...
- RedHat版本Linux安装chrome-stable配合chromeDriver进行自动化测试环境准备
一.Linux机器安装google-chrome-stable 1.设置google-chrome软件源 sudo vim /etc/yum.repos.d/google-chrome.repo [g ...
- C# 简单的统计指定几个字符组合的所有结果
比如 用 a,b,c,d 4个字符组成一个8个长度的字符串,问一共有多少可能,应该有4的8次方种,用代码简单实现 private string[] AAA() { string[] cs = { &q ...
- JAVAWEB之文件的上传和下载
一.文件的上传: Enctype的属性介绍: 基于表单文件上传的界面简介: 文件上传时服务器端获取不到请求信息的原因及获取请求信息的几种方式: 输入流方式的实现: 实用工具包的实现:要导入fileup ...
- Vue Router高级
路由组件传参 通过props解耦 const User = { props: ['id'], template: '<div>User {{ id }}</div>' } co ...
- photoshop钢笔工具简单记录
1. 移动锚点 Ctrl + 左键 2. 增加.删除锚点 左键(显示+.-) 3. 直线曲线相互转换 Alt + 左键(注意提示) 默认情况下为直线,按住Alt鼠标左键点击目标锚点,目标锚点两边的直线 ...
- Dart编程判断
条件/决策构造在执行指令之前评估条件. 下表是Dart中的条件语句 序号 声明和说明 1 if 语句 一个if语句由一个布尔表达式后跟一个或多个语句. 2 If...Else 语句 一个if可以跟一个 ...