zoukankan      html  css  js  c++  java
  • okhttp-utils的封装之okhttp的使用

    HTTP是现代应用的网络。这就是我们如何交换数据和媒体。让你的东西做HTTP有效负载的速度和节省带宽。

    okhttp是HTTP客户端的有效默认:

    • HTTP 2支持允许所有请求相同的主机共享一个插座。
    • 连接池减少请求的延迟(如HTTP / 2不可用)。
    • 透明的gzip收缩下载大小。
    • 响应缓存避免完全重复要求网络。

    okhttp坚守当网络是麻烦:它会悄悄地从常见的连接问题恢复。如果你的服务有多个IP地址okhttp将备用地址,如果第一次连接失败。这是IPv4向IPv6必要冗余的数据中心托管服务。okhttp发起新的连接特点现代TLS(SNI,alpn),落回TLS 1如果握手失败。

    使用okhttp是容易的。它的请求/响应的API的设计与流畅的建设者和不变性。它同时支持同步和异步调用阻塞调用回调函数。

    okhttp支持Android 2.3及以上。对于java,最低要求是1.7。

     

    最近半年来身边开发的朋友越来越多的提到OkHttp,上谷歌百度一下,确实OkHttp成了时下最火的HTTP框架。现在把自己整理的官方教程分享给大家,希望给初学者带来帮助。

    主要包含了一些常见的操作:HTTP GET, HTTP POST,POST单个和多个文件上传),图片加载等。如图:

       

    GET请求

    public void getHttp() {
            OkHttpUtils.get().url("http://www.baidu.com").id(100).build()
                    .execute(new MyStringCallback());
        }

    POST请求

    public void postHttp() {
            OkHttpUtils.post().url(url).addParams("q", "test")
                    .addParams("showapi_appid", "11548")
                    .addParams("showapi_timestamp", "201601012135954")
                    .addParams("showapi_sign", "bb1d15ab7ce646ec87cc89d684ca4bcb")
                    .build()//
                    .execute(new MyStringCallback());

    文件上传

      /**
        * 提交单个文件
        */
    OkHttpUtils.postFile().url(url).file(file).build()
                .execute(new MyStringCallback());
     /***
         * 
         * post表单形式上传多个文件
         * 
         * @param view
         */
        public void postFile() {
            String path4 = "/storage/emulated/legacy/Tencent/MobileQQ/qbiz/html5/2312/sqimg.qq.com/"
                    + "qq_product_operations/dyzx_folder/images/bg.jpg";
            File file4 = new File(path4);
            Map<String, String> params = new HashMap<String, String>();
            params.put("key", "value");
            params.put("key", "value");
            OkHttpUtils.post().addFile("filedata0", "bg.jpg", file4)
                    .addFile("filedata1", "bg.jpg", file4).url(url).params(params)//
                    .build()//
                    .execute(new MyStringCallback());
        }

    显示图片

    public void getImage(View view) {
            String url = "http://avatar.csdn.net/8/6/0/1_dickyqie.jpg";
            OkHttpUtils.get().url(url).tag(this).build().connTimeOut(20000)
                    .readTimeOut(20000).writeTimeOut(20000)
                    .execute(new BitmapCallback() {
                        @Override
                        public void onError(Call call, Exception e, int id) {
                            _mTextView.setText("onError:" + e.getMessage());
                        }
    
                        @Override
                        public void onResponse(Bitmap bitmap, int id) {
                            mImageView.setImageBitmap(bitmap);
                        }
                    });
        }

    Post JSON

    /***
         * 
         * 
         * 提交一个Gson字符串到服务器端,注意:传递JSON的时候,不要通过addHeader去设置contentType,
         * 而使用.mediaType(MediaType.parse("application/json; charset=utf-8")).。
         * 
         * @param view
         */
        public void postString(View view) {
            OkHttpUtils.postString().url(url)
                    .content(new Gson().toJson(new Bean("zhy", "123")))
                    .mediaType(MediaType.parse("application/json; charset=utf-8"))
                    .build().execute(new MyStringCallback());
        }

    AndroidManifest.xml配置

        <uses-permission android:name="android.permission.INTERNET" />
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
        <uses-permission android:name="android.permission.READ_PHONE_STATE" />
        <uses-permission android:name="android.permission.MANAGE_ACCOUNTS" />
        <uses-permission android:name="android.permission.GET_ACCOUNTS" />
        <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
        <uses-permission android:name="android.permission.READ_LOGS" />
        <uses-permission android:name="android.permission.VIBRATE" />
        <uses-permission android:name="android.permission.WRITE_SETTINGS" />
        <uses-permission android:name="android.permission.WAKE_LOCK" />
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
        <uses-permission android:name="android.permission.RECORD_AUDIO" />
        <uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />

    Android Studio

    compile 'com.zhy:okhttputils:2.6.2'

    Eclipse

    下载最新jar:okhttputils-2_6_2.jar  okhttp.jar  okio.jar   注:点击可下载,

    工具类代码太多未完全给出,直接下载即可调试或使用。

    代码点击下载

  • 相关阅读:
    URAL 2067 Friends and Berries (推理,数学)
    URAL 2070 Interesting Numbers (找规律)
    URAL 2073 Log Files (模拟)
    URAL 2069 Hard Rock (最短路)
    URAL 2068 Game of Nuts (博弈)
    URAL 2066 Simple Expression (水题,暴力)
    URAL 2065 Different Sums (找规律)
    UVa 1640 The Counting Problem (数学,区间计数)
    UVa 1630 Folding (区间DP)
    UVa 1629 Cake slicing (记忆化搜索)
  • 原文地址:https://www.cnblogs.com/zhangqie/p/6189095.html
Copyright © 2011-2022 走看看