1.2 okhttp 入门

一.简介

OkHttp是一个高效的HTTP客户端,它有以下默认特性:
支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接
连接池减少请求延时
透明的GZIP压缩减少响应数据的大小
缓存响应内容,避免一些完全重复的请求
当网络出现问题的时候OkHttp依然坚守自己的职责,它会自动恢复一般的连接问题,如果你的服务有多个IP地址,当第一个IP请求失败时,OkHttp会交替尝试你配置的其他IP,OkHttp使用现代TLS技术(SNI, ALPN)初始化新的连接,当握手失败时会回退到TLS 1.0。
note: OkHttp 支持 Android 2.3 及以上版本Android平台, 对应于 Java, JDK 1.7及以上.

二.使用

OkHttp的使用是非常简单的. 它的请求/响应 API 使用构造器模式builders来设计,它支持阻塞式的同步请求和带回调的异步请求。 官网:https://github.com/square/okhttp

添加依赖:

compile 'com.squareup.okhttp3:okhttp:3.11.0'

2.1 GET请求

-new OkHttpClient;
-构造Request对象;
-通过前两步中的对象构建Call对象;
-通过Call#enqueue(Callback)方法来提交异步请求;

String url = "http://wwww.baidu.com";
OkHttpClient okHttpClient = new OkHttpClient();
final Request request = new Request.Builder()
        .url(url)
        .get()//默认就是GET请求,可以不写
        .build();
Call call = okHttpClient.newCall(request);

2.2 POST请求

OkHttpClient okHttpClient = new OkHttpClient(); // 创建client对象
        FormBody formBody = new FormBody.Builder() // form表单
                .add("name","lisi")
                .build();
          
        Request request = new Request.Builder()
                .post(formBody)
                .url(food_url).build(); // 创建 请求数据的参数对象
        Call call = okHttpClient.newCall(request);
        ....类同

2.3 同步和异步

同步;阻塞式,再当前线程执行逻辑
异步:在当前线程里新建线程执行逻辑,适合耗时任务逻辑。

// 调取异步方法,获取数据
call.enqueue(new Callback() {
            @Override
            public void onFailure(Call call, IOException e) {
                Log.d(TAG, "onFailure: ");
            }
            @Override
            public void onResponse(Call call, Response response) throws IOException {


            }
    }

// 调取同步方法,接收返回对象

Response execute = call.execute();

2.4 okhttp添加缓存

long maxSize = 1024 * 1024 * 4; //设置缓存的大小4Mb


OkHttpClient okHttpClient = new OkHttpClient.Builder()
        .cache(new Cache(getCacheDir(), maxSize))// 设置缓存存放目录
        .build();
Request request = new Request.Builder().url("http://gank.io/api/data/%E7%A6%8F%E5%88%A9/20/1").build();

okHttpClient.newCall(request).enqueue(new Callback() {
    @Override
    public void onFailure(Call call, IOException e) {
        Log.d(TAG, "onFailure: " + e.getMessage());
    }


    @Override
    public void onResponse(Call call, Response response) throws IOException {


        Log.d(TAG, "onResponse: " + response.body().string());
    }
});

猜你喜欢

转载自blog.csdn.net/chentaishan/article/details/106385140
1.2