OkHttp

来源:互联网 发布:网络虚拟现实 编辑:程序博客网 时间:2024/06/06 14:06

在Okhttp之前有android-async-http它的内部使用HttpClient (google在android6.0已经移除了HttpClient),还有国内的Xutils最新的额Xutils3

还有2013年谷歌大会退出的Velloy 缺点是上传和下载大文件事它的弱项

Okhttp内部依赖一个square公司出品的网络请求的库(okio)现在已经被google使用在android的源码上面,可见其功能的强大

OKHTTP的简介:

okhttp是一款高效的HTTP客户端,支持连接同一地址的链接共享同一个socket,
通过链接池来减小相应的延迟,还有透明的GZIP压缩,请求缓存等优势,
其核心主要有路由,连接协议,拦截器,代理,安全性认证,连接池以及网络的适配,
拦截器主要是指添加,一处,或者转换请求,或者回应的头部信息

OKhttp支持的主要的功能:

1、联网 请求文本数据(GET,POST)

2、支持大问价的上传

3、大文件的下载

4、请求图片


个人总结使用okhttp的基本步骤:

/** * 步骤: * 1,得到OkHttpClient对象 * 2,得到一个请求  Requst请求 * 3,使用OkHttpClient对象 调用newCall()方法  将请求Requst请求转成Call任务 * 4,执行Call任务 (同步  异步) * * 更新Ui需要传递到主线程 */
在build.gradle文件里面添加的依赖
compile 'com.squareup.okhttp3:okhttp:3.4.2'
okHttp的get用法简单的Demo:
OkHttpClient okHttpClient = new OkHttpClient();        final Request request = new Request.Builder()                .url("http://interfaces.ziroom.com/index.php?_p=api&_a=carousel")                .addHeader("User-Agent","Apache-HttpClient/UNAVAILABLE (java 1.4)")                .build();        final Call call =  okHttpClient.newCall(request);        //2,同步请求//        new Thread(){//            @Override//            public void run() {//                super.run();//                try {//                    Response response = call.execute();//                    if(response.isSuccessful()){//                        Log.e("AAA","==请求成功=>"+Thread.currentThread().getName());//                        Log.e("AAA","==请求成功信息=>"+response.message());//                        Log.e("AAA","==请求成功码=>"+response.code());//                        Log.e("AAA","==请求成功数据=>"+response.body().string());//                        Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength());////                    }//                } catch (IOException e) {//                    e.printStackTrace();//                }//            }//        }.start();        //1,执行异步任务        //note:请求结果在子线程        //note:请求数据  执行一遍是有数据的  再次执行无数据        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {                //失败            }            @Override            public void onResponse(Call call, Response response) throws IOException {                //成功                if(response!=null){                    Log.e("AAA","==请求成功=>"+Thread.currentThread().getName());                    Log.e("AAA","==请求成功信息=>"+response.message());                    Log.e("AAA","==请求成功码=>"+response.code());                    Log.e("AAA","==请求成功数据=>"+response.body().string());                    Log.e("AAA","==请求成功数据=>"+response.body().string());                    Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength());                }            }        });

okHttp的Post请求:
OkHttpClient okHttpClient = new OkHttpClient();        //FormEncodingBuilder body = new FormEncodingBuilder();//这是OkHttp 的用法 3有所改变        FormBody.Builder builder = new FormBody.Builder();        builder.add("pageNo","1");        builder.add("pageSize","20");        builder.add("serialIdes","2143,3404");        builder.add("v","4.0.0");        FormBody body = builder.build();       /* body.add("pageNo","1");这是OkHttp 的用法 3有所改变        body.add("pageSize","20");        body.add("serialIds","2143,3404");        body.add("v","4.0.0");*/        Request request = new Request.Builder()                .url("http://mrobot.pcauto.com.cn/v2/cms/channels/1?")                .post(body)                .build();        Call call =  okHttpClient.newCall(request);        //2,同步请求//        new Thread(){//            @Override//            public void run() {//                super.run();//                try {//                    Response response = call.execute();//                    if(response.isSuccessful()){//                        Log.e("AAA","==请求成功=>"+Thread.currentThread().getName());//                        Log.e("AAA","==请求成功信息=>"+response.message());//                        Log.e("AAA","==请求成功码=>"+response.code());//                        Log.e("AAA","==请求成功数据=>"+response.body().string());//                        Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength());////                    }//                } catch (IOException e) {//                    e.printStackTrace();//                }//            }//        }.start();//        //1,执行异步任务        //note:请求结果在子线程        //note:请求数据  执行一遍是有数据的  再次执行无数据        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                //成功                if(response!=null){                    Log.e("AAA","==请求成功=>"+Thread.currentThread().getName());                    Log.e("AAA","==请求成功信息=>"+response.message());                    Log.e("AAA","==请求成功码=>"+response.code());                    Log.e("AAA","==请求成功数据=>"+response.body().string());                    Log.e("AAA","==请求成功数据总长度=>"+response.body().contentLength());                }            }        });

0 0