Android【OKHttp】

目录

1 OKHttp

1.1 OKHttp简介

1.2 项目开源地址

1.3 什么是OKHttp

2 OKHttp的基本使用

2.1 Get请求

2.1.1同步GET

2.1.2 异步GET

2.2 POST请求

2.2.1 同步POST

2.2.2 异步POST


1 OKHttp

1.1 OKHttp简介

在讲述 OKHttp 之前 , 我们看下没有 OKHttp 的时代 , 我们是如何完成 http 请求的
在没有OKHttp 的日子 , 我们使用 HttpURLConnection 或者 HttpClient . 那么这两者都有什么优缺点
? 为什么不在继续使用下去呢 ?
HttpClient Apache 基金会的一个开源网络库 , 功能十分强大 , API 数量众多 , 但是正是由于庞大的 API数量使得我们很难在不破坏兼容性的情况下对它进行升级和扩展, 所以 Android 团队在提升和优化HttpClient方面的工作态度并不积极。
HttpURLConnection 是一种多用途 , 轻量极的 HTTP 客户端 , 提供的 API 比较简单 , 可以容易地去使用和扩展. 不过在 Android 2.2 版本之前 , HttpURLConnection 一直存在着一些令人厌烦的 bug. 比如说对一个可读的InputStream 调用 close() 方法时,就有可能会导致连接池失效了。那么我们通常的解决办法就是直接禁用掉连接池的功能:
private void disableConnectionReuseIfNecessary() { 
    // 这是一个2.2版本之前的bug 
    if (Integer.parseInt(Build.VERSION.SDK) < Build.VERSION_CODES.FROYO) {                         
        System.setProperty("http.keepAlive", "false"); 
    } 
}
因此,一般的推荐是在 2.2 之前 , 使用 HttpClient , 因为其 bug 较少 .。 2.2 之后 , 推荐使用
HttpURLConnection , 因为 API 简单 , 体积小 , 并且有压缩和缓存机制 , 并且 Android 团队后续会继续优化HttpURLConnection 。
但是 , 上面两个类库和 OKHttp 比起来就弱爆了 , 因为 OKHttp 不仅具有高效的请求效率 , 并且提供了很多开箱即用的网络疑难杂症解决方案。

1.2 项目开源地址

https://github.com/square/OKHttp

1.3 什么是OKHttp

OKHttp 是一个网络请求开源项目, Android 网络请求轻量级框架 , 支持文件上传与下载,支持 https

2 OKHttp的基本使用

2.1 Get请求

2.1.1同步GET

public static String getSynchronous(String url){
        String result="";

        OkHttpClient client=new OkHttpClient();
        Request request=new Request.Builder()
                .url(url)
                .build();

        try (Response response=client.newCall(request).execute()) {
            result = response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;
    }

2.1.2 异步GET

public void nonSyncGet(String url, Callback responseCallback) {
        String result = null;
        OkHttpClient client = new OkHttpClient();
        Request request = new Request.Builder()
                .url(url)
                .build();
        Call call = client.newCall(request);
        call.enqueue(responseCallback);
    }

2.2 POST请求

2.2.1 同步POST

public static String postSynchronous(String url,String param){

        String result="";
        OkHttpClient client = new OkHttpClient();

        MediaType type = MediaType.Companion.parse("application/json;charset=utf-8");
        RequestBody responsebody = RequestBody.Companion.create(param,type);

        Request request = new Request.Builder()
                .url(url)
                .post(responsebody)
                .build();

        try (Response response = client.newCall(request).execute()){
            result = response.body().string();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return result;

    }

2.2.2 异步POST

/**
     * 异步POST
     * @param url
     * @param responseCallback
     */
    public void nonSyncPost(String url, Callback responseCallback) {
        String json = "test";
        OkHttpClient client = new OkHttpClient();

        //方法过时
        //MediaType JSON = MediaType.parse("application/json; charset=utf-8");
        //RequestBody body = RequestBody.create(JSON, json);

        MediaType JSON = MediaType.Companion.parse("application/json;charset=utf-8");
        RequestBody body = RequestBody.Companion.create(json,JSON);

        Request request = new Request.Builder()
                .url(url)
                .post(body)
                .build();

        try {
            client.newCall(request).enqueue(responseCallback);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值