Retrofit2+RxJava+LoganSquare最佳實(shí)踐

Retrofit2+RxJava+LoganSquare最佳實(shí)踐

基本介紹

Retrofit是Square的一個(gè)非常知名的開(kāi)源的網(wǎng)絡(luò)請(qǐng)求庫(kù)抖所,并且是由Android大神JakeWharton親自操刀撤缴。

現(xiàn)在Retrofit已經(jīng)出到2.0.2版本了质帅,與前的1.9版本相差很大绣夺,并且官方強(qiáng)烈推薦2.0版本栅螟,所以在此就只聊2.0以后的版本具滴。

馬上開(kāi)擼米奸!

首先肯定要在build.gradle中添加retrofit的依賴(lài)。

compile 'com.squareup.retrofit2:retrofit:2.0.2'

創(chuàng)建一個(gè)HTTP API的接口灌旧。

public interface ZhihuService {
   
    @GET("news/latest")
    Call<Daily> getLatest();
    
}

實(shí)例化ZhihuService绑咱,然后發(fā)起HTTP請(qǐng)求。

Retrofit retrofit = new Retrofit.Builder()
    .baseUrl("http://news-at.zhihu.com/api/4/")
    .build();
ZhihuService service = retrofit.create(ZhihuService.class);
Call<Daily> daily = service.getLatest();

說(shuō)好的RxJava呢枢泰?

RxJava到底是什么描融?

Reactive Extensions for the JVM – a library for composing asynchronous and event-based programs using observable sequences for the Java VM.

如果不熟悉RxJava的朋友,可以看看這篇文章衡蚂,給 Android 開(kāi)發(fā)者的 RxJava 詳解

Retrofit2.0依然是支持RxJava的窿克,但和以前的集成在一起不同,現(xiàn)在是完全獨(dú)立的毛甲,需要自己添加CallAdapter年叮。這樣的好處是更靈活,更解耦玻募。

/**
 * Add a call adapter factory for supporting service method return types other than {@link
 * Call}.
 */
public Builder addCallAdapterFactory(CallAdapter.Factory factory) {
      adapterFactories.add(checkNotNull(factory, "factory == null"));
    return this;
}

添加RxJavaCallAdapter

compile 'com.squareup.retrofit2:adapter-rxjava:2.0.2'
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(HOST_NAME)
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

現(xiàn)在Retrofit可以使用RxJava了

首先修改我們的API接口只损。

public interface ZhihuService {
    
     @GET("news/latest")
     Observable<Daily> getLatest();
         
}

RxJava的使用在這里!七咧!

    ZhihuService service = retrofit.create(ZhihuService.class);
    Observable<Daily> observable = service.getLatest();
    observable.subscribeOn(Schedulers.io())
            .observeOn(AndroidSchedulers.mainThread())
            .subscribe(new Observer<Daily>() {
        @Override
        public void onCompleted() {
        }

        @Override
        public void onError(Throwable e) {
        }

        @Override
        public void onNext(Daily daily) {
        }
    });

Retrofit Converter的使用

Converter和CallAdapter一樣跃惫,也從Retrofit中分離出來(lái),需要自己添加艾栋。官方提供了很多convertes.

  • gson
  • jackson
  • moshi
  • protobuf
  • scalars
  • simplexml
  • wire

但是發(fā)現(xiàn)沒(méi)有LoganSqaure爆存,那只有自己擼了,還好在github上已經(jīng)有寫(xiě)好的裹粤,是時(shí)候發(fā)揮我們的拿來(lái)主義的精神了终蒂,不然怎么說(shuō)我們都是github的搬運(yùn)工呢。

complie 'com.github.aurae.retrofit2:converter-logansquare:1.4.0'
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(HOST_NAME)
                .addConverterFactory(LoganSquareConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

為什么使用LoganSquare來(lái)解析JSON遥诉?

天下武功唯快不破拇泣!因?yàn)長(zhǎng)oganSquare快啊矮锈!


Note: Our "400% or more" performance improvement metric was determined using ART. While LoganSquare still comes out on top with Dalvik, it seems as though the comparison is much closer. The benchmarks shown are actual screenshots taken from a 2nd gen Moto X.

添加LoganSquare

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8'
    }
}
apply plugin: 'com.neenbedankt.android-apt'

dependencies {
    apt 'com.bluelinelabs:logansquare-compiler:1.3.6'
    compile 'com.bluelinelabs:logansquare:1.3.6'
}

打印Log

很多時(shí)候霉翔,我們希望打印Http請(qǐng)求的Log,這樣方便調(diào)試苞笨。在老版本的Retrofit中债朵,有個(gè)方法

new RestAdapter.Builder()
    .setLogLevel(RestAdapter.LogLevel.FULL);

但是子眶,在Retrofit2.0后,不再提供該方法了序芦,需要依賴(lài)okhttp中的HttpLoggingInterceptor臭杰。

compile 'com.squareup.okhttp3:logging-interceptor:3.0.1'
HttpLoggingInterceptor interceptor = new HttpLoggingInterceptor();
        interceptor.setLevel(HttpLoggingInterceptor.Level.HEADERS);
        OkHttpClient okHttpClient = new OkHttpClient.Builder()
                .addInterceptor(interceptor)
                .build();
Retrofit retrofit = new Retrofit.Builder()
                .baseUrl(HOST_NAME)
                .client(okHttpClient)
                .addConverterFactory(LoganSquareConverterFactory.create())
                .addCallAdapterFactory(RxJavaCallAdapterFactory.create())
                .build();

看了這么多,源碼呢谚中?

源碼當(dāng)然要獻(xiàn)上的渴杆,之前的一個(gè)開(kāi)源的APP叫IDaily,其中的HTTP請(qǐng)求就是采用的Retrofit2+RxJava+LoganSquare宪塔,敢興趣的朋友磁奖,可以看一下。

That's all!

到此就結(jié)束了, 初次寫(xiě)類(lèi)似的文章某筐,如有錯(cuò)誤比搭,望見(jiàn)諒!謝謝南誊!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末身诺,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子弟疆,更是在濱河造成了極大的恐慌戚长,老刑警劉巖盗冷,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件怠苔,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡仪糖,警方通過(guò)查閱死者的電腦和手機(jī)柑司,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)锅劝,“玉大人攒驰,你說(shuō)我怎么就攤上這事」示簦” “怎么了玻粪?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)诬垂。 經(jīng)常有香客問(wèn)我劲室,道長(zhǎng),這世上最難降的妖魔是什么结窘? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任很洋,我火速辦了婚禮,結(jié)果婚禮上隧枫,老公的妹妹穿的比我還像新娘喉磁。我一直安慰自己谓苟,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布协怒。 她就那樣靜靜地躺著涝焙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪孕暇。 梳的紋絲不亂的頭發(fā)上纱皆,一...
    開(kāi)封第一講書(shū)人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音芭商,去河邊找鬼派草。 笑死,一個(gè)胖子當(dāng)著我的面吹牛铛楣,可吹牛的內(nèi)容都是我干的近迁。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼簸州,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼鉴竭!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起岸浑,我...
    開(kāi)封第一講書(shū)人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤搏存,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后矢洲,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體璧眠,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年读虏,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了责静。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡盖桥,死狀恐怖灾螃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情揩徊,我是刑警寧澤腰鬼,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站塑荒,受9級(jí)特大地震影響熄赡,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜袜炕,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一本谜、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧偎窘,春花似錦乌助、人聲如沸溜在。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)掖肋。三九已至,卻和暖如春赏参,著一層夾襖步出監(jiān)牢的瞬間志笼,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工把篓, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留纫溃,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓韧掩,卻偏偏與公主長(zhǎng)得像紊浩,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疗锐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,304評(píng)論 25 707
  • 本博客為作者原創(chuàng)坊谁,如需轉(zhuǎn)載請(qǐng)注明原博客出處:WONDER'TWO 0X00 寫(xiě)在前面 相信做過(guò)And...
    一只酸奶牛哇閱讀 4,367評(píng)論 9 34
  • 簡(jiǎn)介 剛接觸Retrofit的時(shí)候,就寫(xiě)了一篇簡(jiǎn)單的使用介紹:Retrofit 2.0基本使用方法,算是對(duì)Retr...
    Whyn閱讀 2,851評(píng)論 4 24
  • 持續(xù)分享87天滑臊,20171008口芍。張紅。 今天下午送孩子上學(xué)雇卷,整整8天鬓椭,一直陪著孩子,估計(jì)也是煩了聋庵。昨天和愛(ài)...
    啊呦a7_94閱讀 210評(píng)論 2 4
  • 素色萬(wàn)園飛鳥(niǎo)絕膘融,松濤薄雪草黃居。 壽翁擊掌追雄鹿祭玉,愚士揮刀捉凍魚(yú)。 長(zhǎng)夜冬眠紅葉落春畔,深秋花寂綠林儲(chǔ)脱货。 登高極目冰封...
    雨意生香閱讀 887評(píng)論 46 78