这几天学习了下okhttp的使用,公司的网络请求一直是使用的xutils。学习完okhttp基本的用法之后,想想觉得应该记录一下,加深下印象,也方便以后自己回头再来看。水平低,所以如果有同学看到这篇文章,想使用okhttp的话,建议自己使用原生的okhttp,或者使用github上的一些大神提供的封装类库。
一,okhttp使用步骤:
我使用的okhttp的版本是3.6的
1. 首先要给自己的工程添加依赖:
compile ‘com.squareup.okhttp3:okhttp:3.6.0’
2. 代码中使用okhttp的步骤:
1 . 创建okHttpClinet对象,同时可以设置超时时间等 .
private static OkHttpClient okHttpClient = new OkHttpClient().newBuilder()
.cookieJar(new CookieJar() {
//把cookie保存到内存中,使应用在打开后访问服务器时每次Request的sessionId一致
private final HashMap<String, List<Cookie>> cookieStore = new HashMap<>();
@Override
public void saveFromResponse(HttpUrl url, List<Cookie> cookies) {
L.e("saveFromResponse url.host():" + url.host());
cookieStore.put(url.host(), cookies);
}
@Override
public List<Cookie> loadForRequest(HttpUrl url) {
L.e("loadForRequest url.host():" + url.host());
List<Cookie> cookies = cookieStore.get(url.host());
return cookies != null ? cookies : new ArrayList<Cookie>();
}
})
.connectTimeout(10, TimeUnit.SECONDS).build();
2 .构建Request
Request.Builder builder = new Request.Builder();
Request.Builder builder1 = builder.get().url(mBaseUrl);
3 .将Request封装为Call
Request request = builder1.build();
Call call = okHttpClient.newCall(request);
4 .调用call的enqueue()方法发出请求
call.enqueue(...);
二,get请求。自己拼接处最终的get请求地址(没有找到其他更好的办法,比如说有个参数集合可以直接设置进去这种)
public static Call baseGet(String action, Map<String, String> map) {
if (mBaseUrl == null) {
return null;
}
//构建Request
Request.Builder builder = new Request.Builder();
Request.Builder builder1 = builder.get().url(mBaseUrl);
if (map != null) {
//拼接出最终的get请求地址
StringBuilder mUrl = new StringBuilder(mBaseUrl).append(action + "?");
for (Map.Entry<String, String> entry : map.entrySet()) {
mUrl.append("&" + entry.getKey() + "=" + entry.getValue());
}
builder1 = builder.get().url(String.valueOf(mUrl));
}
Request request = builder1.build();
//将Request封装为Call
Call call = okHttpClient.newCall(request);
return call;
}
三,post请求。使用一个Map把post请求的参数添加到FormBody对象中。
public static Call basePost(String action, Map<String, String> map) {
//构建post请求体内容
FormBody.Builder formBody = new FormBody.Builder();
for (Map.Entry<String, String> entry : map.entrySet()) {
formBody.add(entry.getKey(), entry.getValue());
}
FormBody body = formBody.build();
//构建Request
Request.Builder url = new Request.Builder().url(mBaseUrl + action).post(body);
Request request = url.build();
//将Request封装为Call
Call call = okHttpClient.newCall(request);
return call;
}
###四,文件上传下载这块就不贴代码了,想看的话请移步这里github地址。本篇文章主要还是学习,大家想使用okhttp的话还是看github上的一些大神的项目吧。谢谢。