OkHttp

来源:互联网 发布:depthmap软件 编辑:程序博客网 时间:2024/06/04 18:15

OkHttp

   当前最火Http框架, 由,Square公司推出, OKHttp的项目地址:https://github.com/square/okhttp

特点
  1. 创建连接池缓存响应数据来减少重复的网络请求
  2. 基于Http的文件上传
  3. 文件下载
  4. 加载图片
  5. 支持SPDY, Google开发的基于TCP的应用层协议
  6. IP地址自动切换
  7. GZip压缩减少传输的数据包大小, 文本压缩率极大

请求

OkHttp必须创建一个Request对象才能发送网络请求, Request对象可以添加请求所需的地址,以及请求头

网络请求方式常见的有Post和Get方式

Get

OkHttp默认是Get请求

Request request = new Request.Builder()                            .url(请求地址)                            .build();

Post请求

Post请求还需要创建一个请求体对象 RequestBody, RequestBody里面可以添加Post请求所需的数据

Post请求又分为表单请求和Json请求

  • 表单请求

    表单请求是键和值想对应的数据提交方式

// 方式1RequestBody requestBody = FormEncodingBuilder().add().builder();// 方式2        RequestBody requestBody = new FormBody.Builder()                .add("username", mUsername)                .add("password", mPassword)                .build();Request request = new Request.Builder()                            .url(url)                            .Post(requestBody)                            .build();
  • Json请求
RequestBody requestBody = RequestBody.create(Json, json);Request request = new Request.Builder()                            .url(url)                            .Post(requestBody)                            .build();

响应

OkHttp请求操作完成后会返回一个Response对象, Response包含响应信息

Response

Response response = okHttpClient.newCall(request).execute();response.isSuccessful() // 请求是否成功response.code// 状态码

响应体

ResponseBody body = response.body(); // 获取请求体

执行网络请求

执行请求操作, OkHttp提供了同步和异步请求

同步请求

try {  // 获取响应对象    Response response = okHttpClient.newCall(request).execute();    if (response.isSuccessful()) {      // body为请求数据        ResponseBody body = response.body();    }} catch (IOException e) {    e.printStackTrace();}

异步请求

okHttpClient.newCall(request).enqueue(new Callback() {    /**     * 请求失败     * @param call     * @param e     */    @Override    public void onFailure(Call call, IOException e) {    }    /**     * 请求成功     * @param call     * @param response 响应体     * @throws IOException      */    @Override    public void onResponse(Call call, Response response) throws IOException {        // 异步请求如果需要更新UI需要回到主线程    }});
0 0
原创粉丝点击