Android----OKHttp网络请求-拦截器
2017-12-06 19:42
211 查看
封装一个请求网络工具类
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);
}
}
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);
}
}
相关文章推荐
- Android实际开发之网络请求组件的封装(OkHttp为核心)
- Android更好的扩展性更强网络请求框架----okhttp
- android网络请求框架的学习之路——浅谈对Volley,OkHttp,Retrofit的了解与对比 标签: androidVolleyOkhttpRetrofit网络请求框架
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Android网络请求框架—OKHttp 源码解析
- android网络请求框架的学习之路——浅谈对Volley,OkHttp,Retrofit的了解与对比
- Android网络请求框架之——okhttp3
- android网络请求组件(一)OkHttp3的封装使用
- Android----------OkHttp网络请求框架Get和Post简单封装(泛型)
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- android网络请求,OKHttp post访问web API
- android网络请求框架的学习之路——浅谈对Volley,OkHttp,Retrofit的了解与对比
- kotlin for android----------MVP模式下(OKHttp和 Retrofit+RxJava)网络请求的两种实现方式
- Retrofit,OkHttp拦截器,RxJava封装请求网络
- android,retrofit,okhttp,日志拦截器,使用拦截器Interceptor统一打印请求与响应的json
- Android基于OkHttpUtils网络请求的二次封装
- Android 原生HttpURLConnection网络请求工具类(get post)
- Android网络请求框架AsyncHttpClient (android-async-http)介绍说明
- Android主流网络请求开源库的对比(Android-Async-Http、Volley、OkHttp、Retrofit)
- 【Android学习】网络通信----以HttpURLConnection Post请求为例