基于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保持单例。