热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

向OkHttpClient添加多个拦截器

如何解决《向OkHttpClient添加多个拦截器》经验,为你挑选了1个好方法。

我正在尝试了解和在应用程序中使用拦截器。我正在使用LoggingInterceptor,还包括另一个用于添加授权标头的拦截器。我注意到在添加多个拦截器时,我需要进行调用chain.proceed(chain.request),该调用基本上会多次运行请求,并在我添加的所有拦截器中产生响应。

这是我很困惑的地方,由于我拥有拦截器的数量,我不希望请求多次运行。有什么办法可以实现?



1> Fred..:

我不确定您看到的结论是您正在多次运行该请求,但是我可以向您保证情况并非如此。

OkHttp拦截器是一条链,因此是chain您在拦截器方法中收到的类的名称。拦截器按请求的添加顺序运行,而响应的添加顺序则相反。例如,如果您先添加日志记录拦截器,然后添加身份验证器,则将首先运行用于请求的日志记录器,然后运行身份验证。这意味着您将不会看到请求的身份验证标头(或与此相关的任何其他身份验证字段),因为它们是在您记录请求后添加的。

相比之下,如果在末尾添加日志记录拦截器,则将看到以前的拦截器添加的所有内容。

让我们看一个通用的示例:A->B->C是以字母顺序添加的一系列拦截器。这意味着A先运行,然后B再运行,C对于请求和响应C,先运行,然后B再运行A。当A与要求完成的,它可以调用chain.proceed,它会与请求继续进行B。同样的B,当它要“继续”在链中的请求。完成所有拦截器后,OkHttp将执行一次请求并以相反的顺序通过所有拦截器运行响应。换句话说,这就是链的概念出现的地方。这几乎类似于函数编程中的函数组合。

最后,如果您调用chain.proceed(chain.request),则不会多次运行该请求,只是将其沿链传递并等待响应。

这是官方的解释,它将比我的要好得多。


推荐阅读
  • 对okhttp网络请求的简单介绍publicclassAppextendsApplication{OkHttpClient实例是唯一的,所有的请求都会通过 ... [详细]
  • 目前正在做毕业设计,一个关于校园服务的app,我会抽取已完成的相关代码写到文章里。一是为了造福这个曾经帮助过我的社区,二是写文章的同时更能巩固相关知识的记忆。一、前言在爬取教务系统 ... [详细]
  • 本文介绍了使用Java实现大数乘法的分治算法,包括输入数据的处理、普通大数乘法的结果和Karatsuba大数乘法的结果。通过改变long类型可以适应不同范围的大数乘法计算。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 09 性能优化网络优化
    如何优化一个网络请求呢?相信大家在面试的时候可能会被问到这个问题。今天我其实就是讲述下我知道的一些简单的优化方式,可以帮助大家在面试的过程中得到点基础分数。 ... [详细]
  • android之OkHttpClient通信OkHttpClient用法1:自定义缓存OkHttpClienthttpclientnewOkHttpClient.Builder() ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 深入理解Kafka服务端请求队列中请求的处理
    本文深入分析了Kafka服务端请求队列中请求的处理过程,详细介绍了请求的封装和放入请求队列的过程,以及处理请求的线程池的创建和容量设置。通过场景分析、图示说明和源码分析,帮助读者更好地理解Kafka服务端的工作原理。 ... [详细]
  • 本文介绍了django中视图函数的使用方法,包括如何接收Web请求并返回Web响应,以及如何处理GET请求和POST请求。同时还介绍了urls.py和views.py文件的配置方式。 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • 使用eclipse创建一个Java项目的步骤
    本文介绍了使用eclipse创建一个Java项目的步骤,包括启动eclipse、选择New Project命令、在对话框中输入项目名称等。同时还介绍了Java Settings对话框中的一些选项,以及如何修改Java程序的输出目录。 ... [详细]
  • 毕业设计做的项目,答辩完了,就共享出来。波尼音乐是一款开源Android在线音乐播放器。 ... [详细]
  • Android进阶必学retrofit源码解析,最新Android面试合集
    CalllistRepos(Path(“user”)Stringuser);}创建Retrofit并生成API的实现RetrofitretrofitnewRetro ... [详细]
author-avatar
书友49812911
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有