ok常用拦截器 会追加
来源:互联网 发布:宇宙几维 知乎 编辑:程序博客网 时间:2024/06/03 18:48
package utils;import android.util.Log;import com.liu.asus.yikezhong.Myapp;import java.io.IOException;import java.util.List;import okhttp3.FormBody;import okhttp3.HttpUrl;import okhttp3.Interceptor;import okhttp3.MultipartBody;import okhttp3.Request;import okhttp3.Response;import okhttp3.logging.HttpLoggingInterceptor;/** * Created by 地地 on 2017/12/10. * 邮箱:461211527@qq.com. */public class NetInterceptor { private static final int TIMEOUT_CONNECT = 5; //5秒 private static final int TIMEOUT_DISCONNECT = 60 * 60 * 24 * 7; //7天 public static final Interceptor REWRITE_RESPONSE_INTERCEPTOR = new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { //获取retrofit @headers里面的参数,参数可以自己定义,在本例我自己定义的是cache,跟@headers里面对应就可以了 String cache = chain.request().header("cache"); okhttp3.Response originalResponse = chain.proceed(chain.request()); String cacheControl = originalResponse.header("Cache-Control"); //如果cacheControl为空,就让他TIMEOUT_CONNECT秒的缓存,本例是5秒,方便观察。注意这里的cacheControl是服务器返回的 if (cacheControl == null) { //如果cache没值,缓存时间为TIMEOUT_CONNECT,有的话就为cache的值 if (cache == null || "".equals(cache)) { cache = TIMEOUT_CONNECT + ""; } originalResponse = originalResponse.newBuilder() .header("Cache-Control", "public, max-age=" + cache) .build(); return originalResponse; } else { return originalResponse; } } }; public static final Interceptor REWRITE_RESPONSE_INTERCEPTOR_OFFLINE = new Interceptor() { @Override public okhttp3.Response intercept(Chain chain) throws IOException { Request request = chain.request(); //离线的时候为7天的缓存。 if (!MyNetUtils.isConnected(Myapp.context)) { request = request.newBuilder() .header("Cache-Control", "public, only-if-cached, max-stale="+TIMEOUT_DISCONNECT) .build(); } return chain.proceed(request); } }; public static final Interceptor REWRITE_RESPONSE_INTERCEPTOR_LOG = new HttpLoggingInterceptor(new HttpLoggingInterceptor.Logger() { @Override public void log(String message) { System.out.println("MYOKTTP==="+message); } }).setLevel(HttpLoggingInterceptor.Level.BODY); public static final Interceptor REWRITE_RESPONSE_MYINTERCEPTOR=new Interceptor() { public String TAG = "LogInterceptor"; @Override public Response intercept(Chain chain) throws IOException { Request request = chain.request(); String token = (String) SPUtils.get(Myapp.context, "token", ""); Log.d(TAG,"\n"); Log.d(TAG,"----------Start----------------"+token); String method=request.method(); if("POST".equals(method)){ FormBody.Builder sb = new FormBody.Builder(); if (request.body() instanceof FormBody) { FormBody body = (FormBody) request.body(); for (int i = 0; i < body.size(); i++) { sb.add(body.encodedName(i) , body.encodedValue(i)); } body=sb.add("source","android").add("appVersion","101") .add("token",token) .build(); request=request.newBuilder().post(body).build(); Log.d(TAG, "| "+request.toString()); }else { MultipartBody body=(MultipartBody)request.body(); MultipartBody.Builder build = new MultipartBody.Builder().setType(MultipartBody.FORM); build .addFormDataPart("source","android"); build .addFormDataPart("appVersion","101"); build .addFormDataPart("token",token); List<MultipartBody.Part> parts = body.parts(); for (MultipartBody.Part part : parts) { build.addPart(part); } request =request.newBuilder().post(build.build()).build(); } }else { HttpUrl httpUrl = request.url() .newBuilder() .addQueryParameter("source","android") .addQueryParameter("appVersion","101") .addQueryParameter("token",token) .build(); System.out.println("====httpurl"+httpUrl); request = request.newBuilder().get().url(httpUrl).build(); } return chain.proceed(request); } };}
日志拦截器 记得导依赖
compile 'com.squareup.okhttp3:logging-interceptor:3.4.1'public static final int TIMEOUT=1000*100;
OkHttpClient okHttpClient=new OkHttpClient.Builder() .addInterceptor(NetInterceptor.REWRITE_RESPONSE_MYINTERCEPTOR) .addInterceptor(NetInterceptor.REWRITE_RESPONSE_INTERCEPTOR_LOG) .addInterceptor(NetInterceptor.REWRITE_RESPONSE_INTERCEPTOR_OFFLINE) .addNetworkInterceptor(NetInterceptor.REWRITE_RESPONSE_INTERCEPTOR) .connectTimeout(TIMEOUT, TimeUnit.SECONDS) .readTimeout(TIMEOUT, TimeUnit.SECONDS) .writeTimeout(TIMEOUT, TimeUnit.SECONDS) .retryOnConnectionFailure(false) .cache(cache).build();
阅读全文
0 0
- ok常用拦截器 会追加
- ok +拦截器
- Retrofit+Rxjava+ok+拦截器的封装
- MVP自定义拦截器 OK封装
- 常用的取数表(一直会追加和更新)
- OkHttp3 Interceptor 拦截器的使用 统一追加参数
- Struts2常用拦截器
- struts2的常用拦截器-----
- (OK) WPS会一直卡住,无法操作
- Oralce常用SQL -追加中...
- Android仿京东App购物车 二级列表+全选反选+Ok封装+拦截器+结算+商品数量计算
- 常用的struts2的Interceptor拦截器
- struts2常用的预定义拦截器
- 常用拦截器的执行步骤
- filter--项目中常用拦截器(一)
- EVC拦截OK命令和调用其他程序
- 视频播放的时候不拦截OK键
- 播放器OK
- python 快速接口测试
- 深入理解Java:注解(Annotation)自定义注解入门
- PCIe SSD有没有散热问题?
- JavaFx初探 fxml
- Laravel数据库操作文档
- ok常用拦截器 会追加
- dom4j之selectSingleNode方法
- 设计模式学习-装饰器模式
- 支持向量机SVM
- 解剖App 获取里面所有的提图片,按照分辨率分类
- easyui之accordion
- andriod自定义View绘制形, 圆形, 三角形,...
- 约瑟夫环问题
- js之执行环境(作用域)