• Okhttp与Okhttputils的用法及区别


    转自:https://blog.csdn.net/asdasdasd123123123/article/details/86495240

    一、首先介绍下OKhttp的用法

    1.添加依赖 compile 'com.squareup.okhttp3:okhttp:3.2.0'

    2.创建OkHttpClient对象

    OkHttpClient  httpClient=new OkHttpClient();

    3.创建Request对象

    Request  request=Request.Builder()

    .url("URL")

    .builder(); //(get请求)


     RequestBody requestBody = new FormBody.Builder()
                            .add("键", "值")// 构造请求的参数
                            .add("键", "值")// 构造请求的参数
                            .build();

    Request request=Request.Builder()

    .post(requestBody )

    .url("URL")

    .builder();//(post请求)

    4. 添加Request对象到OkHttpClient对象中并执行请求

    httpClient.newCall(request).enqueue(new Callback(){

        @Override
                        public void onFailure(Call call, IOException e) {
                            // 请求失败的处理

                        }


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

    // 请求成功的处理
                            ResponseBody body = response.body();
                            String string = body.string();// 把返回的结果转换为String类型
    // body.bytes();// 把返回的结果转换为byte数组
    // body.byteStream();// 把返回的结果转换为流

    handler.post(new Runnable(){

     @Override

      public void run(){

    //在这里执行操作

    }

    });

    Log.d(TAG,string);
                        }

    }); .

    okhttp数据执行在子线程中所有使用的时候需要写到handler中回调到主线程,因此请求成功后发送消息

    Handler handle=new Handler();


    二、因为原生OkHttp的使用比较复杂,有一个包装过的工具项目okhttp-utils使用非常简单

    1. 添加依赖: compile 'com.zhy:okhttputils:2.3.8'

      

        OkHttpUtils.get()
              .url(URL_GET)
              .build()
              .execute(new StringCallback() {
              @Override
              public void onError(Call call, Exception e) {
              //请求失败
                  textView.setText("get-url请求失败:"+e.getMessage());
              }

              @Override
              public void onResponse(String response) {
              //请求成功
                  textView2.setText("get-url请求成功:"+response);
              }
          });  

        OkHttpUtils.post()
                .url(URL_POST)
               .addParams("键","值")
             .addParams("键","值")
             .build()
             .execute(new StringCallback() {
                @Override
                public void onError(Call call, Exception e) {
                    //请求失败
                    textView.setText("post-url请求失败:"+e.getMessage());
                }

                @Override
                public void onResponse(String response) {
                    //请求成功
                    textView2.setText("post-url请求成功:"+response);
                }
            });
    由此可见两者的区别就不用多说了吧,看代码什么都明白了

    说下他们的特点吧:
    * 支持HTTP/2 和 SPDY
    * 默认支持 GZIP 降低传输内容的大小
    * 支持网络请求的缓存
    * 当网络出现问题时,自动重试一个主机的多个 IP 地址

  • 相关阅读:
    .ds_store是什么文件
    style="background-image: url(__HOMEPAGE__/views/IMJ2V2/images/banner2.jpg)"
    前段实现图片懒加载
    thinkphp路由的作用
    thinkphp跨模块调用
    关于肥胖和美国为什么那么多胖子
    php中局部变量和全局变量
    thinkphp5项目--企业单车网站(七)
    thinkphp5项目--企业单车网站(六)
    XSS攻击及防御
  • 原文地址:https://www.cnblogs.com/bao-ZhangJiao/p/14268780.html
Copyright © 2020-2023  润新知