zoukankan      html  css  js  c++  java
  • Okhttp使用

    Okhttp使用


     

    2019-03-31-20:48:45          云林原创


     

    一、Okhttp介绍:

    1、Okhttp开源库出自Square公司,是一个优秀的网络请求框架,它基于httpURLConnectiond的封装,支持get/post请求,文件的上传和下载,图片的加载,让写法更加简单,可以处理更加复杂的网络请求。

    2、Okhttp可是实现的功能

    • get/post同步、异步请求
    • 文件的上传,下载
    • 图片的加载
    • 请求回调等

    3、Okhttp的特点

    • 响应缓存
    • 支持GZIP压缩
    • 支持websocket
    • 多IP切换
    • 减少连接池请求延时

    二、Okhttp请求准备

    ##1、OkHttp的依赖的引入

    Module的gradle中添加

    --------------------------------------------------------

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

    --------------------------------------------------------

    然后同步一下项目即可。

    okhttp有自己的官网,可在官网上查询最新依赖,官网网址:OKHttp官网

    ##2、OkHttp中添加权限

        <uses-permission android:name="android.permission.INTERNET"></uses-permission>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"></uses-permission>
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

    三、OkHttp进行Get请求

    Get 请求只需要四步即可完成:

    1 . 获取OkHttpClient对象:

    OkHttpClient client = new OkHttpClient();
    

    2 . 构造Request对象:

    Request request = new Request.Builder()
                    .get()
                    .url("https:www.baidu.com")
                    .build();
    

    3 . 将Request封装为Call:

    Call call = client.newCall(request);
    

    4 . 根据需要调用同步或者异步请求方法  

     同步调用
    //同步调用,返回Response,
    Response response = call.execute();
    

      异步调用

    //异步调用,并设置回调函数
    call.enqueue(new Callback() {
          //请求失败调用
        @Override
        public void onFailure(Call call, IOException e) {
            Toast.makeText(OkHttpActivityDemo.this, "get failed", Toast.LENGTH_SHORT).show();
        }
        //请求成功调用
        @Override
        public void onResponse(Call call, final Response response) throws IOException {
            final String res = response.body().string();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(OkHttpActivityDemo.this, "get success", Toast.LENGTH_SHORT).show();
              } 
         });
        } 
    });

    注意:

    在异步调用时,回调函数是在子线程,不能在子线程更新UI,需要借助于 runOnUiThread() 方法或者 Handler 来处理

    四、OkHttp进行Post请求提交键值对:

      Post 请求和进行 Get 请求很类似。

    1 、获取OkHttpClient对象:

     OkHttpClient client = new OkHttpClient();

    2、使用FormBody构建包含键值对类型参数的请求体:

    FormBody formBody = new FormBody.Builder()
                    .add("username", "admin")
                    .add("password", "123")
                    .build();
    

    3、 构建Request,将FormBody作为Post方法的参数传入

    Request request = new Request.Builder()
                    .url("http://www.jianshu.com/")
                    .post(formBody)
                    .build();

    4、将Request封装为Call

    Call call = client.newCall(request);
    

    5 . 调用请求,重写回调方法

    call.enqueue(new Callback() {
        @Override
        public void onFailure(Call call, IOException e) {
            Toast.makeText(OkHttpActivityDemo.this, "Post Failed", Toast.LENGTH_SHORT).show();
        }
    
        @Override
        public void onResponse(Call call, Response response) throws IOException {
            final String res = response.body().string();
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                     Toast.makeText(OkHttpActivityDemo.this, "Post success", Toast.LENGTH_SHORT).show();
                }
            });
        }
    });

    五、后记

    以上就是 OkHttp 常用get和set请求的总结,当热还有文件的上传和下载等。

    
    

      

  • 相关阅读:
    Redis源代码分析(十三)--- redis-benchmark性能測试
    kvm中运行kvm
    umount.nfs device busy day virsh extend diskSpace, attachDisk
    ultravnc
    openNebula dubug
    maintenance ShellScripts
    virsh VMI deploy data serial xml
    cloud computing platform,virtual authentication encryption
    基于C 的libvirt 接口调用
    storage theory
  • 原文地址:https://www.cnblogs.com/ITyunlin/p/10633094.html
Copyright © 2011-2022 走看看