当前位置:网站首页 > 技术博客 > 正文

okhttp架构



目录

一,OkHttp简介

二,OkHttp请求处理流程

三,OkHttp环境配置

四,OkHttp的使用

1.get网络请求

2.post上传表单数据

3.post上传json格式数据

4.文件上传

5.文件下载


        OkHttp是square公司推出的一款Android和Java网络请求库,是目前公认的最好用的网络请求框架,OkHttp有以下的特点:

  1. 支持Http/2,允许对同一主机的所有请求共享同一套接字;
  2. 使用连接池减少请求延时;
  3. 透明的GZIP压缩减少响应数据的大小;
  4. 缓存响应的内容,避免重复请求;

OkHttp源码地址:https://github.com/square/okhttp 

(1)使用OkHttp需要先创建OkHttpClient对象,可以使用构造器直接创建,也可以使用builder创建;

(2)使用Request.builder创建Request请求,用于封装要访问的网络地址Url。当进行post操作时,还需创建RequestBody用于封装请求数据,并调用Requst的post方法;

(3)通过OkHttpClient的newCall方法创建Call对象,使用同步或异步的方法发送Request请求,并接收Response响应数据;

(1)在build.gradle中添加依赖:

dependencies {
        implementation 'com.squareup.okhttp3:okhttp:3.14.9'
}

(2)在AndroidManifest.xml中添加网络访问权限:

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

(3)在AndroidManifest.xml添加 android:usesCleartextTraffic="true" 解除Http访问禁制:

OkHttp主要有以下功能:

  1. get,post请求文本数据;
  2. 上传文件;
  3. 下载文件;
  4. 加载图片(自动压缩图片大小);
 
   

        注意这里使用了call的同步请求方式,会产生阻塞,所以此方法必须放在子线程中执行。如果不想放在子线程中执行的话,可以使用call的异步请求方式。

        当请求成功时call会返回Response,我们可以通过response.body()获取字符串,输入流等返回的信息。

        当需要上传数据时,需要创建RequestBody用于封装数据,因为我们这里上传的是表单数据,所以需要创建RequestBody的子类FormBody 。

 
   

        当使用call的异步请求方式时,需要重写两个方法onFailureonResponse,当请求失败时(连接失败或读写超时)调用onFailure,请求成功时调用onResponse。

        可以写一个简单的服务端来验证一下是否可以请求成功:

 
   

        使用Gson需要先添加依赖:

implementation'com.google.code.gson:gson:2.10.1'

        当上传json数据时,自然需要用到RequestBody来封装json数据,同时还需用MediaType来设置数据类型(也就是我们想要上传的数据的类型)。

 
   

同样写一个简单服务端来测试一下:

 
   

        通过OkHttp上传文件的步骤与上传json数据一致,只需更换设置的数据类型即可。因为上传的需要是安卓客户端的数据,所以我们需要先在安卓客户端添加数据。

        打开路径data/data/com.example.okhttp/files,在files目录下添加一张图片,之后就可以开始上传了。第一次打开时没有files这个目录,需要手动创建。

同时还需要给app添加访问sd卡的权限,在AndroidManifest.xml中添加:

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

客户端上传文件:

 
   

服务端接收文件:

 
   

下载文件时不需要上传数据,因此不用创建RequestBody对象,只需发送请求即可。

 
   

服务端提供数据:

 
  
  

                            

版权声明


相关文章:

  • 阅读器和平板看电子书哪个好2025-05-28 21:30:00
  • linux发行版包括2025-05-28 21:30:00
  • js数组拼接2025-05-28 21:30:00
  • oracle中创建视图并查询视图2025-05-28 21:30:00
  • 美团外卖搜索引擎2025-05-28 21:30:00
  • 栅格式布局2025-05-28 21:30:00
  • 神秘f组2025-05-28 21:30:00
  • 原型链的作用2025-05-28 21:30:00
  • html中button按钮用法2025-05-28 21:30:00
  • sar指标使用技巧口诀2025-05-28 21:30:00