博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android小知识-OkHttp的两种请求方式
阅读量:7170 次
发布时间:2019-06-29

本文共 2555 字,大约阅读时间需要 8 分钟。

本平台的文章更新会有延迟,大家可以关注微信公众号-顾林海,包括年底前会更新kotlin由浅入深系列教程,目前计划在微信公众号进行首发,如果大家想获取最新教程,请关注微信公众号,谢谢

OkHttp是目前非常火的网络库,支持HTTP/2,允许所有同一个主机地址的请求共享同一个socket连接,连接池减少请求延时,透明的GZIP压缩减少响应数据的大小,缓存响应内容,避免一些完全重复的请求。

OkHttpClient

private OkHttpClient mHttpClient = null;    private void initHttpClient() {        if (null == mHttpClient) {            mHttpClient = new OkHttpClient.Builder()                    .readTimeout(5, TimeUnit.SECONDS)//设置读超时                    .writeTimeout(5,TimeUnit.SECONDS)设置写超时                    .connectTimeout(15,TimeUnit.SECONDS)//设置连接超时                    .retryOnConnectionFailure(true)//是否自动重连                    .build();        }    }复制代码

在使用OkHttp请求网络时,需要先获取一个OkHttp的客户端对象OkHttpClient,OkHttpClient可以直接通过new来创建,也可以通过OkHttpClient静态内部类Builder来创建,日常开发最常用的是通过build的方式(建造者模式+链式调用)来创建,静态内部Builder提供了很多方法,比如readTimeout代表读时间、writeTimeout代表写时间、connectTimeout代表连接超时时间以及retryOnConnectionFailure代表是否重连等等方法,有了OkHttpClient之后就可以进行网络的同步和异步请求。

同步请求

private void synRequest() {        Request request=new Request.Builder()                .url("http://www.baidu.com")                .get()                .build();        Call call=mHttpClient.newCall(request);        try {            Response response=call.execute();            System.out.println(request.body().toString());        } catch (IOException e) {            e.printStackTrace();        }    }复制代码

进行网络请求时,需要先创建一个请求对象Request,Request对象也是通过build方式创建,在Request的静态内部类Builder中定义了设置请求地址、请求方式、请求头的方法。

接着创建Call对象,Call对象可以理解为Request和Response之间的一个桥梁,最后通过Call对象的execute方法完成Response的读取,

总结同步请求的三个步骤如下:

  1. 创建OkHttpClient和Request对象。

  2. 将Request对象封装成Call对象。

  3. 调用Call的execute()方法发送同步请求。

注意:OkHttp的同步请求会阻塞当前线程,因此不能在UI线程中请求,需要开启子线程,在子线程中发送请求。

异步请求

private void asyRequest() {        final Request request=new Request.Builder()                .url("http://www.baidu.com")                .get()                .build();        Call call=mHttpClient.newCall(request);        call.enqueue(new Callback() {            @Override            public void onFailure(Call call, IOException e) {            }            @Override            public void onResponse(Call call, Response response) throws IOException {                System.out.println(request.body().toString());            }        });    }复制代码

异步请求与同步请求的前两步都是一样的创建OkHttpClient和Request对象以及将Request对象封装成Call对象,通过Call对象的enqueue方法执行异步请求,enqueue传入一个Callback对象,Callback提供了两个回调方法,分别是成功和失败。

总结异步请求的三个步骤如下:

  1. 创建OkHttpClient和Request对象。

  2. 将Request对象封装成Call对象。

  3. 调用Call的enqueue方法进行异步请求。

注意:OkHttp的异步请求,其中两个回调方法onResponse和onFailure都是在工作线程中执行的,执行结果可以通过Handler来发送。


搜索微信“顾林海”公众号,定期推送优质文章。

转载地址:http://mjqwm.baihongyu.com/

你可能感兴趣的文章
12个值得关注的顶级JS库
查看>>
线程安全的CopyOnWriteArrayList介绍
查看>>
Java并发编程(一)Thread详解
查看>>
RealEvo 安装问题浅析
查看>>
Java并发核心-exchanger
查看>>
mysql数据迁移之<存储过程>
查看>>
5、前后端分离跨域问题
查看>>
spring结合mybatis不用手动关闭sqlSession 原理
查看>>
XSS攻击
查看>>
程序员如何做好应聘?简历、面试和Offer
查看>>
调试Linux内核操作指南(withing kgdb)
查看>>
LDA线性判别分析原理
查看>>
上海交通大学副教授何建平:网络系统中的数据隐私—量化、分析和设计
查看>>
数据库初探(二)
查看>>
docker离线安装
查看>>
CAD转换为图片可以设置哪些格式
查看>>
orcl 自定义排序
查看>>
AES加密解密算法简介
查看>>
KVM虚拟机管理指南(纯命令行模式)
查看>>
Hibernate 一对多注解 mappedby 作用
查看>>