说明

一个项目中的网络请求肯定不止一个。多个的话就涉及到相同的请求信息,或者相同的信息过滤条件。
因此,就需要自定义OkHttp3设置。可以通过拦截器、过滤器实现

测试方法都是在test 测试用例中进行的

拦截器

应用拦截器

使用addInterceptor
 new OkHttpClient.Builder().addInterceptor(new Interceptor() {//应用拦截器@NonNull@Overridepublic Response intercept(@NonNull Chain chain) throws IOException {Request request = chain.request().newBuilder().addHeader("SystemType", "android").addHeader("version", "20220803.001.123").build();System.out.println("version2"+chain.request().headers("version"));Response response = chain.proceed(request);return response;//正常返回,不处理//return chain.proceed(chain.request());}}).build();

网络拦截器

使用addNetworkInterceptor

 new OkHttpClient.Builder().addNetworkInterceptor(new Interceptor() {//网络拦截器@NonNull@Overridepublic Response intercept(@NonNull Chain chain) throws IOException {System.out.println("version"+chain.request().headers("version"));Request request = chain.request().newBuilder().addHeader("locDesc", "cwc").addHeader("userName", "lianmei").build();Response response = chain.proceed(request);return response;}}).build();

备注
1、addInterceptor早于addNetworkInterceptor执行
2、addInterceptor是程序增加的,
addNetworkInterceptor是网络增加,可以获取addInterceptor的请求信息
3、addInterceptor不管有误网络都会执行,
addNetworkInterceptor,有网络是才执行,没有网络时不执行

过滤器最终代码

package com.pha.four;import androidx.annotation.NonNull;import org.junit.Test;import java.io.IOException;import okhttp3.Call;
import okhttp3.Interceptor;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class OkHttpSetting {@Testpublic void InterCeptorTest() {OkHttpClient okHttpClient = new OkHttpClient.Builder().addInterceptor(new Interceptor() {//应用拦截器@NonNull@Overridepublic Response intercept(@NonNull Chain chain) throws IOException {Request request = chain.request().newBuilder().addHeader("SystemType", "android").addHeader("version", "20220803.001.123").build();System.out.println("version2"+chain.request().headers("version"));Response response = chain.proceed(request);return response;//正常返回,不处理//return chain.proceed(chain.request());}}).addNetworkInterceptor(new Interceptor() {//网络拦截器@NonNull@Overridepublic Response intercept(@NonNull Chain chain) throws IOException {System.out.println("version"+chain.request().headers("version"));Request request = chain.request().newBuilder().addHeader("locDesc", "cwc").addHeader("userName", "lianmei").build();Response response = chain.proceed(request);return response;}}).build();Request request = new Request.Builder().url("http://www.httpbin.org/get?a=2&b=3").build();Call call = okHttpClient.newCall(request);Response response = null;try {response = call.execute();System.out.println(response.body().string());} catch (IOException e) {e.printStackTrace();}}
}

缓存和cookie

缓存

通过.cache(new Cache(new File(“C:\Users\Cherry”),1024*1024)) 缓存

OkHttpClient okHttpClient = new OkHttpClient.Builder().cache(new Cache(new File("C:\\Users\\Cherry"),1024*1024)).build();

cookie

通过cookieJar(new CookieJar(){})记录到程序内
通过Map<String,List> cookieMap = new HashMap<>(); 记录个网站的cookie 。

package com.pha.four;import androidx.annotation.NonNull;import org.junit.Test;import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;import okhttp3.Call;
import okhttp3.Cookie;
import okhttp3.CookieJar;
import okhttp3.FormBody;
import okhttp3.HttpUrl;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.Response;public class OkHttpCookieTest {Map<String,List<Cookie>>  cookieMap = new HashMap<>();@Testpublic void CookieTest() {OkHttpClient okHttpClient = new OkHttpClient.Builder().cookieJar(new CookieJar() {//记录cookies@Overridepublic void saveFromResponse(@NonNull HttpUrl httpUrl, @NonNull List<Cookie> list) {cookieMap.put(httpUrl.host() ,list);}@NonNull@Overridepublic List<Cookie> loadForRequest(@NonNull HttpUrl httpUrl) {List<Cookie> cookies = OkHttpCookieTest.this.cookieMap.get(httpUrl.host());return cookies == null ? new ArrayList<>() : cookies;}}).build();FormBody formBody = new FormBody.Builder().add("username","ty082093105").add("password","123123").build();Request request = new Request.Builder().url("https://www.wanandroid.com/user/login").post(formBody).build();Call call = okHttpClient.newCall(request);try  {Response response = call.execute();System.out.println(response.body().string());} catch (IOException e) {e.printStackTrace();}//使用cookiesrequest = new Request.Builder().url("https://www.wanandroid.com/lg/collect/list/0/json").build();call = okHttpClient.newCall(request);try  {Response response = call.execute();System.out.println(response.body().string());} catch (IOException e) {e.printStackTrace();}}
}

记忆点

1、应用拦截器addInterceptor
2、网络拦截器addNetworkInterceptor
3、缓存cache
4、cookie记录:cookieJar(new CookieJar(){}).build()

23.2、Android -- OkHttp3 基础学习 自定义设置相关推荐

  1. Android编译及编译脚本、Android构建基础学习笔记

    Android编译及编译脚本.Android构建基础学习笔记 Android编译及编译脚本 概述 Android.mk转换成Android.bp 例子(简单Android.mk文件转Android.b ...

  2. Android零基础学习指南,从入门到精通一战通关

    Android程序员想要入门进阶,升职拿高薪,一般需要做出以下努力: 明确的学习进阶规划,系统化掌握更深层次的技术 弄清目标岗位的能力需求,针对性提升技术能力; 增加实战经验,高效率提高解决实际问题的 ...

  3. Android开发基础学习总结

    最近一直在学习安卓开发,主要从安卓的基础组件,布局,Activity学起,也是边学习边整理笔记,希望可以给需要帮助的人解决能解决掉的问题,以后也会慢慢更新的. 一.Android布局 1.Androi ...

  4. 关于Android零基础学习的思考

    看了很多帖子,只发现了一篇给新手指明道路的[[转]学习Android需要的基础].对于已有编程经验的人来说,学习相对轻松.而...今天特此发帖一份,帮助那些观望而不知道学什么的人.本人才疏学浅,仅把自 ...

  5. Android Studio基础学习(1)——基本布局及属性

    此文章是根据b站视频学习整理的笔记,穿插一些延申的内容 原视频标题:手把手教你用Android Studio写一个APP,bv号:BV1MK411p7dp As布局属性 Drawable-xhdpi: ...

  6. Android 控件学习--自定义SeekBar

    从sdk中可以得知,它是ProgressBar的扩展,它比进度条多了一个功能就是可拖动性,这样用户就可以控制进度条,比如播放电影,用户可以通过拖动SeekBar进行快进与快退.       要实现其拖 ...

  7. Android 零基础学习之路

    第一阶段:Java面向对象编程 1.Java基本数据类型与表达式,分支循环. 2.String和StringBuffer的使用.正则表达式. 3.面向对象的抽象,封装,继承,多态,类与对象,对象初始化 ...

  8. Android Kotlin基础学习 - 接口

    文章目录 背景 接口定义 接口实现 实例 接口中的属性 实例 函数重写 实例 背景 学习,记录分享,坚持开源! 接口定义 Kotlin 接口与 Java 8 类似,使用 interface 关键字定义 ...

  9. android通过代码设置铃声_Android基础(5)—自定义View

    自定义View 基本认知: 虽然Android已经自带来很多强大的UI控件,但是依旧不能满足所有开发人员的需求.通常开发人员需要实现设计师精心设计的视觉效果,这样情况下可能现有的控件就不能满足需求或者 ...

  10. Android零基础入门第40节:自定义ArrayAdapter

    原文:Android零基础入门第40节:自定义ArrayAdapter ListView用起来还是比较简单的,也是Android应用程序中最重要的一个组件,但其他ListView可以随你所愿,能够完成 ...

最新文章

  1. Linux 探索之旅 | 第三部分第五课:延时执行,唯慢不破
  2. 返回txt格式的文本使用编码 js_Node.js学习笔记第一天
  3. pdo php分页6,php pdo自动分页类代码与例子
  4. AndroidStudio编译提示Could not find com.android.tools.lintlint-gradle26.1.3问题的解决
  5. python读取excel,数字都是浮点型,日期格式是数字的解决办法
  6. PDFMate PDF Converter Pro
  7. 怎样使用C# 获取WIFI的连接状态?
  8. POJ1006-Biorhythms【中国剩余定理】
  9. php拿站,从建站到拿站
  10. linux-压缩与解压缩
  11. C#LeetCode刷题之#136-只出现一次的数字(Single Number)
  12. CCF NOI1025 统计奖牌
  13. idea导入tomcat源码
  14. 在mysql存储过程中拼接sql解决in的字段类型不匹配问题
  15. 精进 Quartz—Quartz大致介绍(一)
  16. 修改SRVINSTW支持sys文件
  17. 基于matlab人脸识别论文,基于MATLAB的人脸识别系统的设计
  18. 计算机考研数学2019,2019计算机考研数学复习:最常遇到的10个问题
  19. OpenCV C++案例实战三《二维码检测》
  20. 微信如何实现小程序实时视频直播点播?有哪些难点?

热门文章

  1. 人,要活得明白。活到极致,就是素与简。
  2. Linux基础知识学习
  3. 【题解】【中国大学MOOC】(北京大学)人工智能与信息社会测验——1新闻热点与身边的人工智能
  4. matlab 求公因数,符号运算提取多项式系数和公因数
  5. 『UE4数字孪生』开发流程浅析(持续更新)
  6. python 手机号码_Python手机号码归属地查询代码
  7. MindMap学习使用
  8. (Mac) Mac上如何修改本地的hostname
  9. python练习题5:货币转换 I
  10. 修改win7计算机mac,win7如何在注册表改网卡mac