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   注:点击可下载,

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

    代码点击下载

  • 相关阅读:
    linux查看公网ip的方法
    统计文件或文件夹个数
    python manage.py shell
    炒冷饭,对于数据库“删除”操作大家平时都是物理删除,还是逻辑删除啊?
    SQL表名,应该用表对应资源对象的复数形式还是单数形式
    git常用命令
    Django ORM中的模糊查询
    threading 学习笔记
    class类笔记整理
    函数笔记整理
  • 原文地址:https://www.cnblogs.com/zhangqie/p/6189095.html
Copyright © 2011-2022 走看看