Retrofit 從無(wú)到有

版上有很多關(guān)于 Retrofit 的文章物喷,但是看得越多卤材,越不懂。所以留下一些紀(jì)錄脯丝,免得時(shí)間久了商膊,有所遺漏。

至于Retrofit是甚么宠进,我也無(wú)法解釋得很清楚晕拆,只知道官網(wǎng)明確的說(shuō)明

安全的 HTTP Client 端

如此的簡(jiǎn)單明了。

以下附上兩個(gè)連結(jié)

1. 官網(wǎng) :?http://square.github.io/retrofit/

2. Github :?https://github.com/square/retrofit

當(dāng)?shù)谝淮吸c(diǎn)進(jìn)去這兩個(gè)網(wǎng)址的時(shí)候,嘗試去理解其中的意思实幕,但感覺(jué)是越級(jí)打BOSS吝镣,他懂我,我完全不理解它昆庇。

為什么會(huì)這樣? 因?yàn)閱渭兊闹皇窍胗米羁焖偃チ私馄渲械募夹g(shù)末贾,但卻沒(méi)有想過(guò)為甚么要運(yùn)用到這項(xiàng)技術(shù)。

首先我覺(jué)得應(yīng)該要從幾個(gè)部分著手

1. 要從那里獲得API的資料

2. 對(duì)于 REST 理解多少?

3. 實(shí)作出例子整吆,強(qiáng)迫自己動(dòng)手而不是空想

API的數(shù)據(jù)從哪里來(lái)? 網(wǎng)絡(luò)上有非常多的例子拱撵,但它們已經(jīng)有了API可以接收數(shù)據(jù),我要在重寫一個(gè)接口嗎? 其實(shí)不必要那么麻煩表蝙,可以使用現(xiàn)成的拴测,而且資料豐富。IMDb

注冊(cè)賬號(hào)密碼府蛇,申請(qǐng)API_KEY集索。這個(gè)步驟非常重要。網(wǎng)絡(luò)也有很多教學(xué)汇跨∥窬#花5分鐘完成,可以省去你呆坐在椅子的數(shù)小時(shí)穷遂。

網(wǎng)址:https://www.themoviedb.org/

REST是甚么? 一種設(shè)計(jì)風(fēng)格函匕,不是標(biāo)準(zhǔn)。然后…用力去理解它

最后開始實(shí)作 ( 開始是畫面的設(shè)計(jì)塞颁,調(diào)整資源文件浦箱∥ⅲ可跳過(guò)拉至主要代碼區(qū)塊 )


1. 第一步祠锣,建立一個(gè)新的項(xiàng)目,項(xiàng)目名稱Retrofit

2. 開啟 AndroidManifest.xml

加入網(wǎng)絡(luò)權(quán)限INTERNET

<uses-permission android:name="android.permission.INTERNET">

3. 開啟 build.gradle (Module.app)咽安,添加依賴庫(kù)

dependencies {

compile'com.android.support:appcompat-v7:25.3.1'

// main

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

compile'com.squareup.retrofit2:converter-gson:2.3.0'

compile'com.squareup.picasso:picasso:2.5.2'

// additional

compile'com.android.support:recyclerview-v7:24.2.1'

compile'com.android.support:cardview-v7:24.2.1'

compile'info.hoang8f:android-segmented:1.0.6'

}

里面除了main下的依賴庫(kù)伴网,是 Retrofit 主要使用到的外,另外3項(xiàng)是用在呈現(xiàn)畫面上妆棒。

補(bǔ)充: Picasso主要用于下載圖片和緩存澡腾,代碼簡(jiǎn)單,可上網(wǎng)搜尋相關(guān)文章

依賴庫(kù)的版本會(huì)變動(dòng)糕珊,可參考 Github 上說(shuō)明作調(diào)整动分。

4. 需要呈現(xiàn)的效果

熱門電影,圖片點(diǎn)大红选,還不太會(huì)使用編輯器

5. 開始拉 Activity 版面澜公,activity_main.xml

activity_main.xml

這個(gè)部分的重點(diǎn)在 SegmentGroup,RecyclerView 要宣告正確

字符串資源已經(jīng)抽取到 string.xml 中

6. RecyclerView 內(nèi)容喇肋,使用 CardView 設(shè)定 list_item_movie_v2.xml

list_item_movie_v2.xml 上半部
list_item_movie_v2.xml 下半部

此部分要注意

android:stateListAnimator="@animator/card_foreground_selector"

滑動(dòng)時(shí)要知道坟乾,點(diǎn)選了哪一個(gè)CardView迹辐,所以做了一個(gè)點(diǎn)擊效果

card_foreground_selecto.xml

要記得在 res 下建立一個(gè)文件夾,名稱 animator

star.xml甚侣,用來(lái)顯示評(píng)分分?jǐn)?shù)

7. 建立 color 資源

color.xml

正式開始程序代碼之前明吩,要先把處理 Json 數(shù)據(jù)的部分處理好

1. 利用小工具 GsonFormat ,如何下載可參考網(wǎng)絡(luò)上的教學(xué)

GsonFormat小工具

2. 可以先利用網(wǎng)址看會(huì)回傳甚么數(shù)據(jù)殷费,搭配之前申請(qǐng)好的 API_KEY

這是甚么意思印荔,就是在瀏覽器上貼上以下這短網(wǎng)址

( 如果無(wú)法理解,可以上網(wǎng)下載 Postman 工具详羡,來(lái)查看回傳數(shù)據(jù) )

完整路徑為 :?https://api.themoviedb.org/3/movie/popular?api_key=你的API_KEY

回傳的資料躏鱼,貼近 GsonFormat 讓他自己去產(chǎn)生 get set 參數(shù)。

最后產(chǎn)生2個(gè).class檔

.class檔

3. 首先介紹 MovieResponse

MovieResponse.class

其中要特別注意results殷绍,第一次看的時(shí)候染苛,我卡在這里很久,沒(méi)有注意到它的型態(tài)是List主到。這是根據(jù)我們得到的回傳數(shù)據(jù)茶行,所產(chǎn)生的get set,所以如果要獲得詳細(xì)的數(shù)據(jù)需要再透過(guò)Moivie.class


主要代碼區(qū)塊

1. 建立一個(gè) class登钥,名稱 ApiClient畔师,代碼如下

ApiClient.class

這里要注意的地方有兩個(gè)部分。第一是 Base_URL 的資料牧牢,為甚么要特別拉出說(shuō)看锉,因?yàn)锽ase_URL會(huì)重復(fù)地出現(xiàn),他是不會(huì)改變的塔鳍,且每段 POST 或 GET 的 API 都會(huì)用到它伯铣,我們就只需要修改Base_URL后面的參數(shù)。

再來(lái)是 addConveterFactory轮纫,主要是用來(lái)解析回傳的數(shù)據(jù)腔寡,這里使用GsonConverterFactory,在依賴庫(kù)已經(jīng)添加過(guò)掌唾。

2. 建立一個(gè)interface放前,名稱 ApiInterface

ApiInterface

這里從英文字面的意思就可以了解,我們要在BASE_URL后面再加入糯彬,這些細(xì)節(jié)凭语,才可以成功取回?cái)?shù)據(jù)。

這里只有使用單純的@GET撩扒,而GET后面 {括號(hào)中內(nèi)容} 就是要加在BASE_URL之后的數(shù)據(jù)

Call< MovieResponse >似扔,MovieResponse 是資料的get set。若在之后,取得API回傳數(shù)據(jù)時(shí)虫几,得不道內(nèi)容锤灿,有可能是此部分設(shè)定錯(cuò)誤。

至于@Query的作用是辆脸,產(chǎn)生?api_key=這一段但校,并帶入你之后設(shè)定的api_key

完整的路徑會(huì)是 : https://api.themoviedb.org/3/movie/top_rated?api_key=你的API_KEY

3. MainActivity 代碼

參數(shù)設(shè)定
有使用到 Segment 要使用 implements
OnCreate() 區(qū)塊比較簡(jiǎn)單,一些初始值得設(shè)定

這邊補(bǔ)充一點(diǎn)可以利用 control + alt + m 建立 initView() method 來(lái)完成

Segment 點(diǎn)選

這個(gè)部分啡氢,我覺(jué)得是整篇文章最要的地方

也就是組合API路徑的部分状囱,從 ApiService 取得最基本路徑,再搭配后面?zhèn)魅氲膮?shù)包含倘是,是要選擇哪一段 ApiInterfce亭枷,以及最重要的api_key。

最后取得數(shù)據(jù)

取得數(shù)據(jù)

這里有一點(diǎn)提醒搀崭,如果有成功會(huì)得到數(shù)據(jù)叨粘,失敗會(huì)印出原因。但也有可能不會(huì)顯示瘤睹,前面有說(shuō)過(guò)是 get set 的值設(shè)定錯(cuò)誤升敲。

文章結(jié)束


這篇文章參考了以下網(wǎng)站

https://android.jlelse.eu/consuming-rest-api-using-retrofit-library-in-android-ed47aef01ecb

http://www.androidhive.info/2016/05/android-working-with-retrofit-http-library/

http://www.journaldev.com/13639/retrofit-android-example-tutorial

https://tw.twincl.com/programming/*641y

如果有侵權(quán),請(qǐng)?jiān)俑嬷浯視?huì)配合移除文章



最后驴党,如果要上網(wǎng)搜尋相關(guān)的內(nèi)容可以搭配以下關(guān)鍵詞搜尋

Retrofit、RecyclerView获茬、THE MOVIE DB港庄、API、consuming rest

如果有相關(guān)問(wèn)題恕曲,或有甚么指教鹏氧,可以請(qǐng)各位留言。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末码俩,一起剝皮案震驚了整個(gè)濱河市度帮,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌稿存,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,627評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件瞳秽,死亡現(xiàn)場(chǎng)離奇詭異瓣履,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)练俐,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,180評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門袖迎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事燕锥」脊螅” “怎么了?”我有些...
    開封第一講書人閱讀 169,346評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵归形,是天一觀的道長(zhǎng)托慨。 經(jīng)常有香客問(wèn)我,道長(zhǎng)暇榴,這世上最難降的妖魔是什么厚棵? 我笑而不...
    開封第一講書人閱讀 60,097評(píng)論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮蔼紧,結(jié)果婚禮上婆硬,老公的妹妹穿的比我還像新娘。我一直安慰自己奸例,他們只是感情好彬犯,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,100評(píng)論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著查吊,像睡著了一般躏嚎。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上菩貌,一...
    開封第一講書人閱讀 52,696評(píng)論 1 312
  • 那天卢佣,我揣著相機(jī)與錄音,去河邊找鬼箭阶。 笑死虚茶,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的仇参。 我是一名探鬼主播嘹叫,決...
    沈念sama閱讀 41,165評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼诈乒!你這毒婦竟也來(lái)了罩扇?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,108評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤怕磨,失蹤者是張志新(化名)和其女友劉穎喂饥,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體肠鲫,經(jīng)...
    沈念sama閱讀 46,646評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡员帮,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,709評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了导饲。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捞高。...
    茶點(diǎn)故事閱讀 40,861評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡氯材,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出硝岗,到底是詐尸還是另有隱情氢哮,我是刑警寧澤,帶...
    沈念sama閱讀 36,527評(píng)論 5 351
  • 正文 年R本政府宣布型檀,位于F島的核電站冗尤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏贱除。R本人自食惡果不足惜生闲,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,196評(píng)論 3 336
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望月幌。 院中可真熱鬧碍讯,春花似錦、人聲如沸扯躺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,698評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)录语。三九已至倍啥,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間澎埠,已是汗流浹背虽缕。 一陣腳步聲響...
    開封第一講書人閱讀 33,804評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留蒲稳,地道東北人斤斧。 一個(gè)月前我還...
    沈念sama閱讀 49,287評(píng)論 3 379
  • 正文 我出身青樓帕膜,卻偏偏與公主長(zhǎng)得像爽彤,于是被迫代替她去往敵國(guó)和親擒权。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,860評(píng)論 2 361

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,323評(píng)論 25 707
  • afinalAfinal是一個(gè)android的ioc祥国,orm框架 https://github.com/yangf...
    passiontim閱讀 15,440評(píng)論 2 45
  • 一.榜單介紹 排行榜包括四大類: 單一框架:僅提供路由昵观、網(wǎng)絡(luò)層、UI層舌稀、通信層或其他單一功能的框架 混合開發(fā)框架:...
    偉子男閱讀 5,244評(píng)論 0 161
  • 在漫長(zhǎng)的修行路上扩借,或快或慢椒惨,或早或遲,其實(shí)都是修行潮罪,也都可以被包容顧念吧康谆。 佛,月光嫉到,森林沃暗,禪院,河流何恶,沙石孽锥,自然...
    飛鳥逐溪閱讀 324評(píng)論 0 0
  • 這次本來(lái)是沒(méi)有去朝鮮想法的疫赎。但我清晨5點(diǎn)20從長(zhǎng)沙家中出發(fā)盛撑,兩趟飛機(jī)一趟城際大巴,歷經(jīng)11小時(shí)55分鐘捧搞,不停歇奔波...
    吳艾倫Allen閱讀 456評(píng)論 0 3