okhttp3.0学习

来源:互联网 发布:软件版本说明书模板 编辑:程序博客网 时间:2024/05/22 11:47

这几天学习了下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上的一些大神的项目吧。谢谢。

0 0