Android 進階之路——Retrofit

最近一直在學習php,也有人問我你一個做app的學php干嘛。實不相瞞,換了很多家公司后發(fā)現(xiàn)每家公司的前臺后臺都是冤家,學php的原因就是想能夠自己寫接口,完全自己來做幾乎不可能,但是一些小的功能實現(xiàn)還是可以的。但是這樣就很容易造成,把自己已經(jīng)掌握的知識給忘了,所以就想到了以這種方式記錄下來,方便自己經(jīng)常復習,當然能幫到別人最好了。

剛開始接觸的網(wǎng)絡訪問用的還是Apache的HttpClient,覺得真好用啊,而且自己還二次封裝了一個類,新項目直接拷貝過去用,并且一直沉迷在自己的極樂世界中,但是突然有一天發(fā)現(xiàn)用HttpClient需要導入Apache包了,WTF?? 谷歌拋棄了Apache??這時我才發(fā)現(xiàn)自己早就被潮流扔在了后面,然后就開始用URLConnection,講真 我從來沒用過這么繁瑣的訪問方法,于是我一直在尋找好用的框架,前幾天關注了郭大嬸的公眾號才發(fā)現(xiàn)自己還差得遠,原來世界上還有Retrofit這么個東西,然后又開始了我的學習之路。

---------------------------------------------------------------------------------------說正事分割線-----------------------------------------------------------------------------------------

Retrofit說到底還是Square對okhttp的封裝,沒有那么神秘,用起來方便,理解簡單。到底怎么用呢?

先導包

compile'io.reactivex:rxjava:1.1.0'//Rx的包

compile'io.reactivex:rxandroid:1.1.0'//Rx的包

compile'com.squareup.retrofit2:retrofit:2.0.0-beta4'//Retrofit2所需要的包

compile'com.squareup.retrofit2:converter-gson:2.0.0-beta4'//ConverterFactory的Gson依賴包

compile'com.squareup.retrofit2:adapter-rxjava:2.0.0-beta4'//CallAdapterFactory的Rx依賴包

compile'com.squareup.retrofit2:converter-scalars:2.0.0-beta4'//ConverterFactory的String依賴包

compile'com.google.code.gson:gson:2.6.2'//Gosn解析包

多說一句retrofit2包的版本必須要一致,否則就會報錯。

Retrofit需要定義一個接口來返回我們的Call對象

Post:

public interface RequestSerives {

@POST("index/log")

Call?getUser(@Query("name1") String name2,

@Query("pswd") String pwd);

}

Get:

public interface RequestSerives {

@GET("index/log/{name}")

CallgetUser(

@Path("name") String name);}

}

這里用到的@POST,@GET相信很容易理解,就是通過post,get方法來訪問。

先說一下post:

@Query("name1")? String name2,就是我們請求鍵值對的設置name1是key,name2就是value,這個很容易理解。

再說下get:

請求地址后面的{name}類似于占位符,@Path("name") String name還是鍵值對形式,會把key對應的value放到{key}所在的位置,間接的幫我們拼接了URL。

創(chuàng)建完接口我們就需要來定義Retrofit了:

Retrofit retrofit;

retrofit=new Retrofit.Builder()

.baseUrl("http://192.168.0.104/Think/public/index/")//url

.addConverterFactory(ScalarsConverterFactory.create())//增加返回值為String的支持

.build();

然后利用retrofit對象創(chuàng)建一個RequestSerives就是我們前面定義的接口:

RequestSerives requestSerives;

requestSerives=retrofit.create(RequestSerives.class);

有很多同學到這里就看不懂了,其實這里不用深究create返回的就是一個動態(tài)代理對象,先看下源碼:


當我們調(diào)用requestSerives.getUser();的時候其實是走了動態(tài)代理的invoke方法,在這里Retrofit巧妙的理由注解把接口轉(zhuǎn)換成了一個HTTP請求

然后開始訪問:

Call call =requestSerives.getUser("xx","123");

call.enqueue(newCallback() {

@Override

public voidonResponse(Call call,Response response) {

Log.e("成功",response.body().toString());

tv.setText(response.body().toString());

}

@Override

public voidonFailure(Call call,Throwable t) {

Log.e("失敗","失敗");

}

});

最后別忘了加網(wǎng)絡訪問權限,到這里我們的Retrofit已經(jīng)可以訪問了,是不是比我們之前用的簡單多了

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 寫在前面## 其實一直都沒有寫博客的習慣,借著這次公司內(nèi)部分享的機會,開始寫博客,希望以后漸漸養(yǎng)成習慣。也方便以后...
    seph_von閱讀 964評論 0 1
  • 本博客為作者原創(chuàng),如需轉(zhuǎn)載請注明原博客出處:WONDER'TWO 0X00 寫在前面 相信做過And...
    一只酸奶牛哇閱讀 4,510評論 9 34
  • 愛情,要么讓人成熟,要么讓人墮落。 ——《和莎莫的五百天》 都說一段好的感情會讓兩個人都成長,彼此都比以前更優(yōu)秀,...
    昔朵閱讀 492評論 0 0
  • 上周末,華語電影圈“雙喜盈門”——兩位男演員前后腳在海外封帝! 率先登上熱搜的,是新晉國際影帝劉愷威。 11月4號...
    Sir電影閱讀 1,202評論 7 20

友情鏈接更多精彩內(nèi)容