Android----OKHttp网络请求-拦截器

来源:互联网 发布:淘宝商家申请 编辑:程序博客网 时间:2024/05/17 10:06

封装一个请求网络工具类

public class HttpUtils {
    private static HttpUtils httpUtils;
    private final OkHttpClient client;


    private HttpUtils() {
        //创建OkHttpClient
        //创建拦截器


        client = new OkHttpClient.Builder()
                .addInterceptor(new MyInterceptor())
                .build();
    }


    public static HttpUtils getHttpUtils() {
        if (httpUtils == null) {
            synchronized (HttpUtils.class) {
                if (httpUtils == null) {
                    httpUtils = new HttpUtils();
                }
            }
        }
        return httpUtils;
    }


    /**
     * GET请求
     *
     * @param url      请求地址
     * @param callback 回调
     */
    public void doGet(String url, Callback callback) {
        Request request = new Request.Builder().url(url).build();
        client.newCall(request).enqueue(callback);
    }


    /**
     * POST请求
     *
     * @param url      请求地址
     * @param params   请求的参数
     * @param callback 回调
     */
    public void doPost(String url, Map<String, String> params, Callback callback) {
        //这里可以加网络判断


        //判断参数
        if (params == null || params.size() == 0) {
            throw new RuntimeException("params is null!!!");
        }
        // 创建Request
        FormBody.Builder builder = new FormBody.Builder();
        for (Map.Entry<String, String> entry : params.entrySet()) {
            builder.add(entry.getKey(), entry.getValue());
        }
        FormBody formBody = builder.build();
        Request request = new Request.Builder()
                .url(url)
                .post(formBody)
                .build();
        client.newCall(request).enqueue(callback);
    }

}


自定义的MyInterceptor类

public class MyInterceptor implements Interceptor {
    @Override
    public Response intercept(Chain chain) throws IOException {
        //获取原始的Request请求
//        Request orginRequest = chain.request();
//        FormBody body = (FormBody) orginRequest.body();
//      String name = body.name(0);
//        Request.Builder builder = orginRequest.newBuilder();
//        FormBody formBody = new FormBody.Builder().add("source", "android").build();
//        Request request = builder.post(formBody).build();
//        return chain.proceed(request);


        Request original = chain.request();


        FormBody formBody = (FormBody) original.body();


        String name = formBody.name(0);
        String value = formBody.value(0);
        FormBody formBody2 = new FormBody.Builder()
                .add(name, value)
                .add("source", "android").build();


        //请求定制:添加请求头
        Request request = original.newBuilder()
                .url(original.url())
                .post(formBody2).build();


        return chain.proceed(request);


    }
}

原创粉丝点击