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();





原创粉丝点击