RxJava + Retrofit + Mvp + Dagger2初上手學習過程

在公司的日子項目做完之后總會有一段時間空白期呼巷,不寫代碼的時間怎么感覺過的這么慢囱修,學習吧,學習還能打發(fā)一些時間之外增加自己的知識王悍,程序員這個職業(yè)就是在不斷被各種新技術(shù)學習摧殘中成長的破镰,面對一個新技術(shù)從看各種文章懵逼到一知半解,其實感覺最好的就是了解各大概之后埋頭去敲代碼,在踩過各種坑之后漸漸掌握的鲜漩。

這兩天看網(wǎng)上各種大神關(guān)于RxJava + Retrofit + Mvp + Dagger2的帖子源譬,一看我擦這么多結(jié)合到一塊,那該有多復雜啊孕似,看著這都有了一種要放棄研究的念頭踩娘,不過轉(zhuǎn)念一想,作為一名有抱負的屌絲程序員怎么能被這幾個加號給震懾住喉祭,打開AS养渴,New Project,開始我的爬坑之路

網(wǎng)上找到一個大神開源的項目下載下來就開始了,https://github.com/JustWayward/BookReader

學習一個項目我喜歡的是從Application去研究臂拓,這個項目的Application只是比一般的項目多了這個

private ?AppComponent ?appComponent;點進去

@Component(modules= {AppModule.class,BookApiModule.class})

public interface AppComponent {

? ? ? ContextgetContext();

? ? ? BookApigetReaderApi();

}

開始看到這個@Component(modules= {AppModule.class,BookApiModule.class})這個是什么鬼厚脉,先沒管习寸,點擊去AppModule.class,BookApiModule.class這兩個類

每個里面都有一個@Module胶惰,到這就沒法往下走了,百度查吧霞溪,因為完全沒搞明白在往下走還是懵逼孵滞,

http://blog.csdn.net/wds1181977/article/details/51822043,看了一下這篇文章鸯匹,原來才知道是Dagger2,而這些注解的意思:


@Inject: 通常在需要依賴的地方使用這個注解坊饶。換句話說,你用它告訴Dagger這個類或者字段需要依賴注入殴蓬。這樣匿级,Dagger就會構(gòu)造一個這個類的實例并滿足他們的依賴。

@Module: Modules類里面的方法專門提供依賴染厅,所以我們定義一個類痘绎,用@Module注解,這樣Dagger在構(gòu)造類的實例的時候肖粮,就知道從哪里去找到需要的 依賴孤页。modules的一個重要特征是它們設(shè)計為分區(qū)并組合在一起(比如說,在我們的app中可以有多個組成在一起的modules)涩馆。

@Provide: 在modules中行施,我們定義的方法是用這個注解,以此來告訴Dagger我們想要構(gòu)造對象并提供這些依賴魂那。

@Component: Components從根本上來說就是一個注入器蛾号,也可以說是@Inject和@Module的橋梁,它的主要作用就是連接這兩個部分涯雅。 Components可以提供所有定義了的類型的實例鲜结,比如:我們必須用@Component注解一個接口然后列出所有的@Modules組成該組件,如 果缺失了任何一塊都會在編譯的時候報錯。所有的組件都可以通過它的modules知道依賴的范圍轻腺。

@Scope: Scopes可是非常的有用乐疆,Dagger2可以通過自定義注解限定注解作用域。后面會演示一個例子贬养,這是一個非常強大的特點挤土,因為就如前面說的一樣,沒 必要讓每個對象都去了解如何管理他們的實例误算。在scope的例子中仰美,我們用自定義的@PerActivity注解一個類,所以這個對象存活時間就和 activity的一樣儿礼。簡單來說就是我們可以定義所有范圍的粒度(@PerFragment, @PerUser, 等等)咖杂。

Qualifier: 當類的類型不足以鑒別一個依賴的時候,我們就可以使用這個注解標示蚊夫。例如:在Android中诉字,我們會需要不同類型的context,所以我們就可以定義 qualifier注解“@ForApplication”和“@ForActivity”知纷,這樣當注入一個context的時候壤圃,我們就可以告訴 Dagger我們想要哪種類型的context。


看的也一知半懂的琅轧,這塊的意思大概就是AppComponent提供全局的對象以便于其他的組件依賴使用伍绳,比方context,api等,然后再Application中初始化一下乍桂,Application就完成了

/**

*初始化AppComponent組件

*/

private voidinitComponent() {

? ? ? appComponent=DaggerAppComponent.builder().

? ? ? bookApiModule(newBookApiModule()).

? ? ? appModule(newAppModule(this)).

? ? ? build();

}

下來就是BaseActivity,最主要的是

protected abstract void setupActivityComponent(AppComponent appComponent);

然后再onCreate中

setupActivityComponent(ReaderApplication.getInstance().getAppComponent());

這樣子Activity繼承BaseActivity的時候就可以持有AppComponent的對象進行Presenter的注冊冲杀。

MainComponent,xxxComponent各種Component,個人理解寫多個和寫一個只是為了區(qū)分各個模塊結(jié)構(gòu)睹酌,當每個需要連接服務器去數(shù)據(jù)的

Activity或者Fragment都可以在這里面添加一條权谁,記住就跟在AndroidManifest添加Activity一樣

@Component(dependencies= AppComponent.class)

public interface MainComponent {

? ? ? MainActivityinject(MainActivityactivity);

? ? ? HomeFragmentinject(HomeFragmenthomeFragment);

? ? ? FindFragmentinject(FindFragmentfindFragment);

}

然后每個子Activity或者Fragment實現(xiàn)下面方法即可,當調(diào)用DaggerMainComponent沒有出現(xiàn)自動補全的時候忍疾,可以按Crit+F9,

@Override

protected voidsetupActivityComponent(AppComponent appComponent) {

? ? ? DaggerMainComponent.builder()

? ? ? .appComponent(appComponent)

? ? ? .build()

? ? ? .inject(this);

}

這樣Dagger2的大體需要的東西都部署完成了闯传,之后就是MVP模式了,為了不寫那么多的重復代碼卤妒,還是先定義一個BaseContract,里面包含

BasePresenter和BaseView

public interface BaseContract{

? ?interface BasePresenter {

? ? ? void attachView(Tview);

? ? ? void detachView();

? ?}

? ?interface BaseView {

? ? ? void showError();

? ? ? void complete();

? ?}

}

基于Rx的Presenter封裝,控制訂閱的生命周期

public class RxPresenter?implements BaseContract.BasePresenter{

}

之后為每個要去數(shù)據(jù)綁定的頁面寫一個BaseRVFragment或者BaseRVActivity繼承BaseActivity或者BaseFargment

public abstract class BaseRVFragment<T1 extends BaseContract.BasePresenter> extends BaseFragment{

}

這樣基本的就算完成了甥绿,之后每個頁面需要綁定數(shù)據(jù)只需要添加兩個類,一個是xxxContract,提供刷新頁面的接口和去到數(shù)據(jù)的接口则披,一個是xxxPresenter,具體使用RxJava去調(diào)用接口取數(shù)據(jù)共缕,接收數(shù)據(jù)等操作

public interface ?xxxContract{

? ? interface ?View ?extends ?BaseContract.BaseView{

? ? ? ? void ?showTieziList(List list);

? ? }

? ? interface ?Presenter ?extends ?BaseContract.BasePresenter{

? ? ? ? void ?getTieizList(Stringpage,Stringpagesize);

? ? }

}

最后一步就算子的Activity或者Fragment繼承BaseRVFragment等去具體實現(xiàn),這個整個的流程就走完了士复,中間還有好多沒有搞明白的東西图谷,就是手寫把整個流程走了一遍翩活,然后記錄下來,接下來準備自己寫一個小項目在實踐中去使用這樣可以理解的更多便贵,上面寫的好多有些很淺顯菠镇,但是基本的框架都已經(jīng)分離出來,靜下心來敲代碼吧

項目代碼已經(jīng)上傳Git,喜歡的就拿去繼續(xù)敲代碼吧

https://github.com/737297447/RxJava-Retrofit-Mvp-Dagger2--

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末承璃,一起剝皮案震驚了整個濱河市利耍,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌盔粹,老刑警劉巖隘梨,帶你破解...
    沈念sama閱讀 206,839評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異舷嗡,居然都是意外死亡轴猎,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評論 2 382
  • 文/潘曉璐 我一進店門进萄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捻脖,“玉大人,你說我怎么就攤上這事垮斯±善停” “怎么了?”我有些...
    開封第一講書人閱讀 153,116評論 0 344
  • 文/不壞的土叔 我叫張陵兜蠕,是天一觀的道長。 經(jīng)常有香客問我抛寝,道長熊杨,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,371評論 1 279
  • 正文 為了忘掉前任盗舰,我火速辦了婚禮晶府,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘钻趋。我一直安慰自己川陆,他們只是感情好,可當我...
    茶點故事閱讀 64,384評論 5 374
  • 文/花漫 我一把揭開白布蛮位。 她就那樣靜靜地躺著较沪,像睡著了一般。 火紅的嫁衣襯著肌膚如雪失仁。 梳的紋絲不亂的頭發(fā)上尸曼,一...
    開封第一講書人閱讀 49,111評論 1 285
  • 那天,我揣著相機與錄音萄焦,去河邊找鬼控轿。 笑死,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的茬射。 我是一名探鬼主播鹦蠕,決...
    沈念sama閱讀 38,416評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼在抛!你這毒婦竟也來了片部?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,053評論 0 259
  • 序言:老撾萬榮一對情侶失蹤霜定,失蹤者是張志新(化名)和其女友劉穎档悠,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體望浩,經(jīng)...
    沈念sama閱讀 43,558評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡辖所,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,007評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了磨德。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片缘回。...
    茶點故事閱讀 38,117評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡奏寨,死狀恐怖理澎,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情颜武,我是刑警寧澤您觉,帶...
    沈念sama閱讀 33,756評論 4 324
  • 正文 年R本政府宣布拙寡,位于F島的核電站,受9級特大地震影響琳水,放射性物質(zhì)發(fā)生泄漏肆糕。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,324評論 3 307
  • 文/蒙蒙 一在孝、第九天 我趴在偏房一處隱蔽的房頂上張望诚啃。 院中可真熱鬧,春花似錦私沮、人聲如沸始赎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,315評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽造垛。三九已至,卻和暖如春涨享,著一層夾襖步出監(jiān)牢的瞬間筋搏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,539評論 1 262
  • 我被黑心中介騙來泰國打工厕隧, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留奔脐,地道東北人俄周。 一個月前我還...
    沈念sama閱讀 45,578評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像髓迎,于是被迫代替她去往敵國和親峦朗。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,877評論 2 345

推薦閱讀更多精彩內(nèi)容