OKHttp官网有简单的使用方法 Android中OkHttp基础用法。里面是okhttp官方给出的最基本的用法。但是我们正常的开发中肯定不能直接按照官方代码来直接写我们的网络请求。因为一个APP肯定会有很多的网络请求你逻辑,直接使用官方的示例可以完成我们的业务,但是会造成非常多的冗余代码。不利于我们的调试和代码的维护。所以我们的日常开发中都是对网络请求部分封装成易用好维护的框架之后在用。开源社区也有很多的封装好的网络框架比如 retrofit okhttp-OkGo,
Fast-Android-Networking,okhttputils,NoHttp。以上都是开源社区封装的比较好的网络框架。还有一些比较老的Volley ,android-async-http ,xUtil…
网络框架在好用也是别人封装的。作为一个合格的开发人员我们在使用别分框架的同时也知道其内部的原理,这样才能拿在发生突发情况的时候不至于手忙脚乱,快速的找到发生问题的地方。
创建request对象发送request对象处理response返回的数据
第一:请求头部分request 包括:
- (1)请求的url
- (2)请求的参数(请求头,请求体)
- (3)创建好请求的 request对象
request部分的任务主要是生成一个OKHttp所需要的一个request对象包括get请求对象,post请求对象,文件上传下载的请求对象等等。
第二:请求的核心部分(OKHttp或者urlconnection)
- (1)发送get/post请求
- (2)请求相关的参数配置 (超时,缓存等)
- (3)https的支持
此部分的任务是创建出okhttpClient对象并通过OKHttp的Call方法将第一部分的请求发送出去
第三:请求回调response(callback)
- (1)处理回调函数
- (2)处理返回的异常
- (3)发送消息到主线程
- (4)可以直接把json转成对象实体返回。
此部分的任务是处理Call返回的回调函数,onResponse和onFailure, onResponse是请求成功的回调,请求成功也不一定有数据,我们需要根据responseCode对数据进行处理。onFailure是请求失败的回调根据不同的返回找出请求失败的原因。
第四:返回数据解析
如何将返回的json数据直接解析成我们需要的对象然后在callback中返回呢。可以在传callback的时候,给callback加上一个泛型,通过反射拿到泛型的参数,就能知道参数类型了,之后就可以通过gson或者fastJson等解析并返回了
找到callback上泛型的类型方式
private Class<?> analysisClassInfo(Object obj){
// 可以得到包含原始类型,参数化类型,类型变量,基本类型
Type genType = obj.getClass().getGenericSuperclass();
Type[] actualTypeArguments =((ParameterizedType)genType).getActualTypeArguments();
return (Class<?>)actualTypeArguments[0];
}