前言
本篇文章主要讲解 Android 比较常用的网络框架封装,以及实现一句代码随意切换主流网络框架。读者也可根据该本章思路实现其他效果,比如说,随意切换权限请求框架等。
特点
按这思路写,代码重构非常简单!
什么是隔离层设计?
先来个图解释下
我们就拿现实生活举例。
-
将买房的人(客户)看成是我们写的APP;
-
将有房的人(业主)看成是我们接触的主流网络框架(XUtils、OkHttp、OkGo....);
-
将房地产公司(比如说链家)看成是客户(我们app)所需要的服务(post、get网络请求等);
-
将业务员(中介)看成是客户的推荐者;
那么
App想要实现网络请求,就要先去找到房产公司的业务员,业务员就会在房产公司里拿到已经入驻的网络框架列表(业主列表),提供给用户选择,用户不满意这个房子(网络框架),就可以随时换下一个。而房产公司以及业务员就是本章所谓的隔离层。
思路理解清楚了,接下来就开始实战操作了
第一步,我们先创建房产公司 IHttpProcessor
/**
* 房产公司
*/
public interface IHttpProcessor {
//有卖房的能力
//网络访问的能力
void post(String url, Map<String,Object> params, ICallback callback);
void get(String url, Map<String,Object> params,ICallback callback);
}
复制代码
交易是否成功的回调 ICallback
/**
* 顶层的回调接口
*/
public interface ICallback {
void onSuccess(String result);
void onFailure(String e);
}
复制代码
以及 ICallback 扩展,HttpCallback
/**
* 回调接口的一种实现
*/
public abstract class HttpCallback<Result> implements ICallback{
@Override
public void onSuccess(String result) {
//网络上回来的结果都 在result上
//1.得到调用者用什么样的javaBean来接收数据
Class<?> clz=analysisClassInfo(this);
//2.把String转成javaBean对象交给用户
Gson gson=new Gson();
Result objResult=(Result)gson.fromJson(result,clz);
//3.把结果交给用户
onSuccess(objResult);
}
public abstract void onSuccess(Result objResult);
/**
* 通过该功能得到输入参数的实际类型
*/
private Class<?> analysisClassInfo(Object object){
//