okhttp3.0学习

这几天学习了下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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值