butterKnife + retrofit + RxJava封裝之路

butterKnife + retrofit + RxJava封裝之路

一.ButterKnife

dependencies {
    compile 'com.jakewharton:butterknife:8.6.0'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.6.0'
}

在Activity上使用 ButterKnife.bind(this)

在非Activity上使用ButterKnife.bind(this,view)

二.Retrofit2.0

compile 'com.squareup.retrofit2:retrofit:2.0.2'
compile 'com.squareup.retrofit2:converter-gson:2.0.2'
compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'

<1>創建Retrofit的過程中添加如下代碼:

OkHttpClient.Builder httpClientBuilder = new OkHttpClient.Builder();
httpClientBuilder.connectTimeout(DEFAULT_TIMEOUT, TimeUnit.SECONDS);

Retrofit requestRetrofit = new Retrofit.Builder()
    .client(httpClientBuilder.build())
    .baseUrl(BaseApplication.getBuild() == ConfigConstant.OFFLINE ?     ConfigConstant.BASE_URL_OFFLINE : ConfigConstant.BASE_URL_ONLINE)
    .addConverterFactory(GsonConverterFactory.create())//若需要加密,則判斷替換
    .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
    .build();

requestRetrofit .create(RequestService.class)

<2>retrofit註解:

方法註解,包含 @GET、@POST、@PUT、@DELETE、@PATH、@HEAD、@OPTIONS、@HTTP。

標記註解,包含 @FormUrlEncoded、@Multipart、@Streaming。

參數註解,包含 @Query,@QueryMap、@Body、@Field,@FieldMap、@Part,@PartMap。

其他註解,@Path、@Header,@Headers、@Url

例如:

@GET("getInfo")
Call<UserBeanRes> getQuery(@Query("userName") String userName, @Query("userPwd") String userPwd);

具體使用請參考:http://m.blog.csdn.net/kisty_yao/article/details/76146286

當然,如果想了解retrofit源碼,請參考此人博客:http://blog.csdn.net/carson_ho/article/details/73732115

需要強調一下,上面倆鏈接的博主和我無關係,只是我覺得他寫的很全面,所以推薦,此文檔重點強調部署,具體細節,我後面會給我不對git地址,代碼纔是真道理。

三.RxJava

compile 'io.reactivex:rxjava:1.1.0'
compile 'io.reactivex:rxandroid:1.1.0'

要搞懂RxJava,必須先搞清楚這三個單詞的含義及之間的關係:Observable、Observer、subscribe()

觀察者模式:A 對象(觀察者)對 B 對象(被觀察者)的某種變化高度敏感,需要在 B 變化的一瞬間做出反應。

舉個例子,新聞裏喜聞樂見的警察抓小偷,警察需要在小偷伸手作案的時候實施抓捕。在這個例子裏,警察是觀察者,小偷是被觀察者,警察需要時刻盯着小偷的一舉一動,才能保證不會漏過任何瞬間。

代碼層次的理解:
觀察者採用註冊(Register)或者稱爲訂閱(Subscribe)的方式,告訴被觀察者:我需要你的某某狀態,你要在它變化的時候通知我。

例如點擊事件: View 是被觀察者, OnClickListener 是觀察者,二者通過 setOnClickListener() 方法達成訂閱關係。

通過 setOnClickListener() 方法,Button 持有 OnClickListener 的引用;當用戶點擊時,Button 自動調用 OnClickListener 的 onClick() 方法。另外,如果把這張圖中的概念抽象出來(Button -> 被觀察者、OnClickListener -> 觀察者、setOnClickListener() -> 訂閱,onClick() -> 事件),就由專用的觀察者模式(例如只用於監聽控件點擊)轉變成了通用的觀察者模式。

RxJava 的觀察者模式

RxJava 有四個基本概念:Observable (可觀察者,即被觀察者)、 Observer (觀察者)、 subscribe (訂閱)、事件。Observable 和 Observer 通過 subscribe() 方法實現訂閱關係,從而 Observable 可以在需要的時候發出事件來通知 Observer。

我這邊只是幫助讀着區分概念,至於細節,一篇博文足以具體參考:http://gank.io/post/560e15be2dca930e00da1083

到此爲止,相信大家已經能順暢的把ButterKnife、retrofit、RxJava引入到項目中了,至於具體怎麼封裝,請下載我的Demo,其中包含了一些我理解的MVP思想進去,實屬原創,希望大家在下載觀看之餘,能提出您的一些建議。

項目地址:https://github.com/Deep20160607/RxJavaRetrofitDemo.git

具體代碼的邏輯,隨時可以和我交流探討:QQ:707086125 微信:loveme_dp

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章