基于okhttp的安卓端网络编程

一、技术概述

OkHttp是一款开源的网络框架,封装了一个高性能的http请求库。OkHttp支持封装请求和处理响应,使用OkHttp网络框架可以更方便地处理安卓端的网络请求和前后端的数据交互。

二、技术详述

1、在app目录下的build.gradle中添加依赖。
implementation 'com.squareup.okhttp3:okhttp:4.8.1'
这里使用的是OkHttp 4.x,当然使用OkHttp 3.x也是可以的。
2、创建OkHttpClient对象。
OkHttpClient client = new OkHttpClient();
上述创建创建方法采用默认配置,即默认请求连接超时时间10s,读写超时时间10s,连接不成功会自动再次连接。如果需要另外配置,可以通过Builder的方式来自己定义一个OkHttpclient。

public final OkHttpClient = new OkHttpClient.Builder()
  .addInterceptor(new HttpLoggingInterceptor())
  .cache(new Cache(cacheDir,cacheSize))
  .等等配置
  .build();

3、构造Request对象并由OkHttpClient提交请求。

其中JSON为Activity类中的常量public static final MediaType JSON = MediaType.parse("application/json; charset=utf-8");,json为组装好数据的JSONObject对象,请求头添加token作为页面访问时的身份验证。
4、获得Response对象并进行分析处理。

其中由OkHttpClient创建的Call类对象提交请求,响应主体为含status、message、data字段的json格式的数据。

流程图

三、技术使用中遇到的问题和解决过程

问题描述:Android 9.0以上系统,HTTP网络访问请求受限,HTTPS无影响。
解决过程:1、在项目的res目录下创建xml目录,并在xml目录下新建network_security_config.xml文件,采用Android7.0+的默认网络配置:

2、修改项目的AndroidManifest.xml,在根目录下增加<uses-permission android:name="android.permission.INTERNET" />
3、修改项目的AndroidManifest.xml,在application中增加android:networkSecurityConfig="@xml/network_security_config"

四、总结

okhttp网络框架不仅使用上方便快捷,而且稳定性和安全性表现好,适合于目前安卓端的网络编程。在本次实践中为每个请求创建一个OkHttpClient实例的做法其实是不合适的,会造成资源的浪费。正确的做法应该是用同一个OkHttpClient实例来执行所有的请求,即让OkHttpClient保持单例。

五、列出参考文献、参考博客(标题、作者、链接)

Okhttp3基本使用
【Android】OkHttp3总结与封装
从 http协议角度解析okhttp

posted @ 2021-06-28 17:51  大萌神  阅读(157)  评论(0编辑  收藏  举报