前言
需求是常變得纠吴,在實踐中往往會發(fā)現(xiàn)自己開發(fā)的庫會有這樣或者那樣的不足十绑,然而聚至,碰到網(wǎng)絡請求這樣的庫,會在最少幾十個位置調(diào)用本橙,我們肯定不想改完請求庫的扳躬,還要去改已經(jīng)調(diào)用了的地方全改一遍,這就失去我們二次封裝的本意了甚亭。
要做到不用再去改已經(jīng)調(diào)用的地方坦报,需要注意幾個方面呢?
1.類名狂鞋、類的所在位置不能刪改片择。
2.方法名,方法傳參骚揍,方法返回類型 不能刪改字管。
3.public 的成員變量名字和類型不能刪改。
4.修飾符作用域不能變小信不,比如public 改成private 是不行的嘲叔。
5.類不可改成接口,接口可改成類
怎么做到呢抽活?很簡單硫戈,使用java的方法重載來解決?今天我就給大家實例演示怎么根據(jù)需求添加代碼的下硕。
需求
在使用自己封裝的 網(wǎng)絡請求庫 時丁逝,發(fā)現(xiàn)還是有很多不足的汁胆,所以給自己定了幾個需要修改的方向。
1.有些請求并不需要設置緩存 所以 改為 想要得到緩存時霜幼,才實現(xiàn)onCache()方法
2.有時候嫩码,當請求異常時,才取出緩存顯示罪既,此時铸题,希望在onFailure()方法中,也返回緩存數(shù)據(jù)
3.希望返回的結果可以是已經(jīng)解析完成的實體類
4.加入文件上傳功能
具體做法
1.讓onCache() 和 onFailure()方法 在自己需要時才實現(xiàn)
這個很好解決琢感,把接口改成抽象類丢间,即可 看圖說話;
2.再請求出現(xiàn)異常時驹针,在onFailure()方法中烘挫,返回緩存數(shù)據(jù)
解決辦法:使用方法重載就可以了,OnResultListener 的修改看第一張圖牌捷,然后再 handlerError();調(diào)用方法即可,如下圖
3.放回的結果是已經(jīng)解析完成的實體類
因為json 有JsonObject 和 JSONArray 兩種(Retrofit2.0官方默認的只有JSONObject 一種,如果返回數(shù)據(jù)是JSONArray 則會報錯) 所以我在Builder類添加新的參數(shù)涡驮,用來判斷返回json的格式類型暗甥。而解析json數(shù)據(jù),我采用的是國內(nèi)號稱解析jison數(shù)據(jù)最快的fastJson來實現(xiàn)
在此處捉捅,buider的優(yōu)點就被發(fā)揮出來了撤防,當我們要擴展功能的時候,post方法和get方法都沒有發(fā)生變化棒口,不會影響到歷史調(diào)用寄月。而又擴展了自己需要的功能。相當給力无牵。
4.修改后的使用
結語:當然還可以在builder類添加一個方法漾肮,擴展一個顯示默認的WaitDialog的功能,只要注意文章開頭提到的五大要求茎毁。
項目地址:點此查看