版上有很多關(guān)于 Retrofit 的文章物喷,但是看得越多卤材,越不懂。所以留下一些紀(jì)錄脯丝,免得時(shí)間久了商膊,有所遺漏。
至于Retrofit是甚么宠进,我也無(wú)法解釋得很清楚晕拆,只知道官網(wǎng)明確的說(shuō)明
如此的簡(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)的效果
5. 開始拉 Activity 版面澜公,activity_main.xml
這個(gè)部分的重點(diǎn)在 SegmentGroup,RecyclerView 要宣告正確
字符串資源已經(jīng)抽取到 string.xml 中
6. RecyclerView 內(nèi)容喇肋,使用 CardView 設(shè)定 list_item_movie_v2.xml
此部分要注意
android:stateListAnimator="@animator/card_foreground_selector"
滑動(dòng)時(shí)要知道坟乾,點(diǎn)選了哪一個(gè)CardView迹辐,所以做了一個(gè)點(diǎn)擊效果
要記得在 res 下建立一個(gè)文件夾,名稱 animator
7. 建立 color 資源
正式開始程序代碼之前明吩,要先把處理 Json 數(shù)據(jù)的部分處理好
1. 利用小工具 GsonFormat ,如何下載可參考網(wǎng)絡(luò)上的教學(xué)
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檔
3. 首先介紹 MovieResponse
其中要特別注意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畔师,代碼如下
這里要注意的地方有兩個(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
這里從英文字面的意思就可以了解,我們要在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 代碼
這邊補(bǔ)充一點(diǎn)可以利用 control + alt + m 建立 initView() method 來(lái)完成
這個(gè)部分啡氢,我覺(jué)得是整篇文章最要的地方
也就是組合API路徑的部分状囱,從 ApiService 取得最基本路徑,再搭配后面?zhèn)魅氲膮?shù)包含倘是,是要選擇哪一段 ApiInterfce亭枷,以及最重要的api_key。
最后取得數(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)各位留言。