Android技術(shù)研究原創(chuàng)如需轉(zhuǎn)載請(qǐng)注明出處
以下是在Application中需要配置的Retrofit代碼,這是一個(gè)典型的Builder模式
建造者模式
定義
將一個(gè)復(fù)雜對(duì)象的構(gòu)造與它的表示分離,使同樣的構(gòu)建過程可以創(chuàng)建不同的表示,這樣的設(shè)計(jì)模式被稱為建造者模式。
首先來分析Retrofit.Builder(),調(diào)用默認(rèn)BuiltInConverters構(gòu)造初始化,不做任何操作,然后新增BuiltInConverters到List<Converter.Factory> converterFactories列表。
接著分析baseUrl(URL)方法,這里會(huì)先通過checkNotNull方法檢測(cè)傳遞的url是否為null,接著設(shè)置baseUrl,返回當(dāng)前Builder。
接著分析addConverterFactory(GsonConverterFactory.create())方法,首先看看一下代碼
GsonConverterFactory.create()方法初始化了Gson及GsonConverterFactory,在addConverterFactory方法中
同樣把GsonConverterFactory添加進(jìn)了converterFactories列表中,然后返回當(dāng)前Builder。
接著分析addCallAdapterFactory(RxJavaCallAdapterFactory.create())的流程,RxJavaCallAdapterFactory.create()的相關(guān)代碼如下:
可以看到以上代碼中實(shí)現(xiàn)了CallAdapter.Factory接口,但是當(dāng)前只是初始化了RxJavaCallAdapterFactory,沒有做其他操作,其他的實(shí)現(xiàn)方法等分析到了再做解釋,接著分析addCallAdapterFactory方法,該方法相關(guān)代碼如下:
此方法把RxJavaCallAdapterFactory對(duì)象add到了adapterFactories列表中,然后返回了當(dāng)前Builder。
接著分析build()方法,該方法相關(guān)代碼如下:
以上代碼中首先校驗(yàn)了url,然后初始化了OKHttpClient對(duì)象,然后把之前的RxJavaCallAdapterFactory添加到了局部的adapterFactories列表中,然后add了一個(gè)默認(rèn)的DefaultCallAdapter,接著把全局的converterFactories拷貝到了局部的converterFactories中,一切對(duì)象初始化工作做完后開始Retrofit對(duì)象的創(chuàng)建,相關(guān)代碼如下:
從以上代碼中前四個(gè)參數(shù)在當(dāng)前的配置中是都有值的,但是callbackExecutor=null和validateEagerly=false(默認(rèn)值)
初始化Retorfit沒有做額外的其他操作,那么配置相關(guān)的代碼就分析完畢了,在這個(gè)過程中我們初始化了BuiltInConverters、GsonConverterFactory、Gson、RxJavaCallAdapterFactory、OKHttpClient、DefaultCallAdapter、Retrofit等對(duì)象,下篇接著分析這些對(duì)象在Retorfit中的使用。