okhttp3 使用讲解

  • 1.简介

HTTP/2 support allows all requests to the same host to share a socket.
Connection pooling reduces request latency (if HTTP/2 isn’t available).
Transparent GZIP shrinks download sizes.

OkHttp supports Android 5.0+ (API level 21+) and Java 8+.

  • 2.配置
  implementation 'com.squareup.okhttp3:okhttp:3.2.0'

  <uses-permission android name = "android.permission.INTERNET"/>

  • 3.get
           OkHttpClient okHttpClient = new OkHttpClient();
           Request request = new Request.Builder()
                   .url(home_list_url)
                   .build();
           Call call = okHttpClient.newCall(request);
           call.enqueue(new Callback() {
               @Override
               public void onFailure(Call call, IOException e) {

               }
               @Override
               public void onResponse(Call call, Response response) throws IOException {
                   String result = response.body().string();
               }
           });

       } catch (Exception e) {
           e.printStackTrace();
       }
  • 4.post
        try {
            //post方式提交的数据
            FormBody formBody = new FormBody.Builder()
                    .add("username", "android")
                    .add("password", "50")
                    .add("phone", "50")
                    .add("verify", "50")
                    .build();
            OkHttpClient okHttpClient = new OkHttpClient();
            Request request = new Request.Builder()
                    .post(formBody)
//                    .header("User-Agent", "my-agent")
//                    .addHeader("Accept-Language", "zh-cn")
                    .url(post_url)
                    .build();
            Call call = okHttpClient.newCall(request);

            call.enqueue(new Callback() {
                @Override
                public void onFailure(Call call, IOException e) {
                    Log.d(TAG, "onFailure: ");
                }
                @Override
                public void onResponse(Call call, Response response) throws IOException {
                    final String result = response.body().string();
                    Log.d(TAG, "onResponse: " + result);
                    runOnUiThread(new Runnable() {
                        @Override
                        public void run() {
                            textView.setText(result);
                        }
                    });
                }
            });
        } catch (Exception e) {
            e.printStackTrace();
        }
  • 5.同步和异步
    同步是阻塞式的,串联执行,同步发生在当前线程内。
    异步是并发式的,会再次创建子线程处理耗时操作。

  • 6.概括讲解
    okhttpclient:构建该对象的时候,会new Dispatcher()对象,
    Dispatcher :主要用于分发同步和异步的任务队列。维护三个集合,一个异步等待集合,一个异步运行集合,一个是同步运行集合。
    RealCall 对call接口的实现类,封装了请求服务器的数据和配置项目,同时处理执行具体同步和异步的操作。

  • 7.拦截器(interceptors)

RetryAndFollowUpIntercaptors
Bridgeinterceptors
Cacheinterceptors
Connectinterceptors
CallserverIntercaptors

一个完整的异步请求,主要有以下几点:new okhttpclient new Request(),通过client.newCall,传入request请求对象且返回一个Call对象,执行call.enqueue()来实现一个完整的请求逻辑。主要涉及几点:
1.构建okhttpclient对象的时候,会new Dispatcher()对象,Dispatcher主要用于维护同步和异步请求的状态。并维护一个线程池,有三个集合,一个异步等待集合,一个异步运行集合,一个是同步运行集合。
2.RealCall 对call接口的实现类,封装了请求服务器的数据和配置项目,同时处理执行具体同步和异步的操作。
3.interceptors 拦截器,一个完整的请求会依次执行以下几个拦截器,最终返回结果。
RetryAndFollowUpIntercaptors 重试和重定向拦截器
Bridgeinterceptors 桥接拦截器
Cacheinterceptors 缓存拦截器
Connectinterceptors 链接拦截器
CallserverIntercaptors 请求服务拦截器

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 2018-3-30日精进【敬畏】-【体验】-【持续】-【交给】-【显现】 1、缺啥补啥,怕啥练啥 2、一切为我所用...
    其实_1d17阅读 734评论 0 0
  •  首先启动第一个节点,不明白的可以回到 - 以太坊私链网络节点创建 一、复制创世块文件 创世区块文件要一致,节点之...
    Jan_gogogo阅读 4,193评论 1 1
  • 我不能证明我的清白 浑浊如雨季的湄公河 拿来的言辞和借口,他们一听便知 一个江湖骗子,骗走文山州西畴县某个姑娘的芳...
    华东民阅读 3,207评论 2 4