前言
需求是常变得,在实践中往往会发现自己开发的库会有这样或者那样的不足,然而,碰到网络请求这样的库,会在最少几十个位置调用,我们肯定不想改完请求库的,还要去改已经调用了的地方全改一遍,这就失去我们二次封装的本意了。
要做到不用再去改已经调用的地方,需要注意几个方面呢?
1.类名、类的所在位置不能删改。
2.方法名,方法传参,方法返回类型 不能删改。
3.public 的成员变量名字和类型不能删改。
4.修饰符作用域不能变小,比如public 改成private 是不行的。
5.类不可改成接口,接口可改成类
怎么做到呢?很简单,使用java的方法重载来解决?今天我就给大家实例演示怎么根据需求添加代码的。
需求
在使用自己封装的 网络请求库 时,发现还是有很多不足的,所以给自己定了几个需要修改的方向。
1.有些请求并不需要设置缓存 所以 改为 想要得到缓存时,才实现onCache()方法
2.有时候,当请求异常时,才取出缓存显示,此时,希望在onFailure()方法中,也返回缓存数据
3.希望返回的结果可以是已经解析完成的实体类
4.加入文件上传功能
具体做法
1.让onCache() 和 onFailure()方法 在自己需要时才实现
这个很好解决,把接口改成抽象类,即可 看图说话;
2.再请求出现异常时,在onFailure()方法中,返回缓存数据
解决办法:使用方法重载就可以了,OnResultListener 的修改看第一张图,然后再 handlerError();调用方法即可,如下图
3.放回的结果是已经解析完成的实体类
因为json 有JsonObject 和 JSONArray 两种(Retrofit2.0官方默认的只有JSONObject 一种,如果返回数据是JSONArray 则会报错) 所以我在Builder类添加新的参数,用来判断返回json的格式类型。而解析json数据,我采用的是国内号称解析jison数据最快的fastJson来实现
在此处,buider的优点就被发挥出来了,当我们要扩展功能的时候,post方法和get方法都没有发生变化,不会影响到历史调用。而又扩展了自己需要的功能。相当给力。
4.修改后的使用
结语:当然还可以在builder类添加一个方法,扩展一个显示默认的WaitDialog的功能,只要注意文章开头提到的五大要求。
项目地址:点此查看