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 加 ...
随机推荐
- C# 简单的往txt中写日志,调试时很有用
原文 http://blog.csdn.net/hejialin666/article/details/6106648 有些程序在调试时很难抓住断点(如服务程序),有些程序需要循环无数次,要看每一次或 ...
- HTML 自定义元素教程
组件是 Web 开发的方向,现在的热点是 JavaScript 组件,但是 HTML 组件未来可能更有希望. 本文就介绍 HTML 组件的基础知识:自定义元素(custom elements). 文章 ...
- JS变量1
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 从零开始搭建系统2.2——ELK安装及配置
ELK 最新版本对JDK的最低要求是1.8,安装java_1.8版本 一.Elasticsearch 1.创建目录 2.下载安装包 wget https://artifacts.elastic.co/ ...
- Vuejs input 和 textarea 元素中使用 v-model 实现双向数据绑定
demo <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <titl ...
- lua redis 操作
https://redis.io/commands/keys 遍历redis里面的所有key ,还能进行模糊匹配, 这样就省去了对key的手动过滤了 比如 keys term_info* ) &quo ...
- python 模拟按键模拟键盘按键按下放开
python模拟按键 pip install pypiwin32安装库 import win32conimport win32apiimport time 导入 打个比方模拟A win32api.ke ...
- C++11中的技术剖析(萃取技术)
从C++98开始萃取在泛型编程中用的特别多,最经典的莫过于STL.STL中的拷贝首先通过萃取技术识别是否是已知并且支持memcpy类型,如果是则直接通过内存拷贝提高效率,否则就通过类的重载=运算符,相 ...
- 2019.7.3模拟 光影交错(穷举+概率dp)
题目大意: 每一轮有pl的概率得到正面的牌,pd的概率得到负面的牌,1-pl-pd的概率得到无属性牌. 每一轮过后,都有p的概率结束游戏,1-p的概率开始下一轮. 问期望有多少轮后正面的牌数严格大于负 ...
- vue.js 2.0 --- 安装node环境,webpack和脚手架(入门篇)
1.环境搭建 1.1.安装node.js 1.2 安装过程很简单,一路“下一步”就可以了.安装完成之后,打开命令行工具(win+r,然后输入cmd),输入 node -v,如下图,如果出现相应的版本号 ...