使用Android API最佳實踐

imesong發表於2014-04-17

寫在前面

現在,Android應用程式中整合第三方API已十分流行。應用程式都有自己的網路操作和快取處理機制,但是大部分比較脆弱,沒有針對網路糟糕情況進行優化。感謝Square lnc 這家有創新精神的公司,將信用卡商業交易帶到手機上。現在有了一系列高質量開源庫,支援在Android應用程式中整合。

做什麼,如何做?

現在,我們要依次學習使用Retrofit、OKHttp和GSON,簡單快速的整合REST API。使用這個組合,我們需要從Twitch.tv下載並解析一些資料。跟著下面的步驟可以在幾分鐘內,不用寫繁瑣的模板程式碼,完成大部分的REST API整合。

學習

Retrofit

Retrofit簡化了從Web API下載資料,解析成普通的Java物件(POJO)。例如,要從Github 上下載使用者倉庫的資訊,你只需要編寫下面的幾行:

另外,你需要建立倉庫資訊類和資料型別。這些程式碼也可以自動生成,下面會介紹如何自動生成。

整個過程很簡單,類似傳送一次有引數的請求或傳送POST或HEAD。如何連線不同型別的API,請檢視說明文當

Retrofit的特性之一可以將處理邏輯新增到請求和響應中。你可以新增資料到http請求頭部,也可以攔截驗證失敗的響應重定向到登入介面。

OKHttp

OKHttp是Android版Http客戶端。非常高效,支援SPDY、連線池、GZIP和 HTTP 快取。預設情況下,OKHttp會自動處理常見的網路問題,像二次連線、SSL的握手問題。如果你的應用程式中整合了OKHttp,Retrofit預設會使用OKHttp處理其他網路層請求。

GSON

GSON是將JSON解析成POJO的Java庫。GSON也可以將POJO解析成JSON。在Android中,資料物件儲存在SharePreference更加方便。

要使用GSON,首先需要建立相應的POJO資料,再用GSON解析為POJO物件。解析過程簡單且非常高效。需要了解如何建立可以被GSON解析的POJO物件,請檢視說明文件。Retrofit使用GSON解析JSON資料。

開始Coding

新增庫檔案到工程

  1. 下載RetrofitOKHttpGSON庫檔案。
  2. 逐個新增jar檔案到你的工程中。
  3. 如果使用Android Studio,可以使用gradle同步這個工程。

查詢或者編寫API

你可能已有一份API,如果你還在尋找API目錄,我推薦ProgrammableWeb。在這個教程中,我們會解析Twitch.Tv的資料流。請求格式請參考說明手冊。Twicht.tv請求資料流的JSON格式:
http://api.justin.tv/api/stream/list.json

展示輸出

展示一些API返回的資料,下面的示例是由於是一個GET請求,只能在瀏覽器中執行,返回資料如下:

建立POJO

這部分很有趣,用我們獲取到的資料自動建立對應的POJO。使用jsonschema2pojo,匯入包名、類名和JSON資料,儲存為私有型別。示例中展示的構造器無法使用,因為JSON資料的根元素是個陣列,不是物件。所以我只貼出了陣列的第一個元素。展示相關的圖片示例。

POJO-Generator

整合POJOs

將自動產生的POJOs貼上到工程中就可以了。在我的示例工程中,他們在models包中。

使用Retrofit下載(解析)API

建立REST Adapter

建立Adapter,類似設定endPoint。

定義API介面

為需要連線的endPoint定義介面。下面示例中,使用limit和offset,這兩個引數用來控制請求資料位置和大小。詳細說明請參考API文件

你可能會注意到,我們期望返回的是一組JustinTvStreamData物件,也就是我們剛才自動產生的POJO。關於如何定義這個介面的更多資訊,請參考Retrofit說明文件

建立Twitch.tv 服務

現在我們已經建立了endPoint,定義了需要的介面。下面需要建立Twitch.TV服務,傳送請求。

使用API

傳送API請求十分簡單,只需要使用剛才建立的服務即可。

這裡有一點需要注意,Retrofit會在後臺執行緒下載並解析API資料,根據結果不同(成功或失敗)傳送到UI執行緒。Retrofit也支援在後臺自動下載(這裡沒有顯示)。

資料處理趣事

現在我們用POJO資料做一些有趣的事情。在這個Demo中,展示了Twitch.Tv頻道的圖片和描述,使用Picasso Library 下載快取圖片。

TwitchClient-576x1024

參考程式碼

示例程式碼下載

感覺有趣嗎?

你有發現這類工作很有趣嗎?你是否喜愛古樸的賓夕法尼亞雄鹿?你是一名出色的Android開發者嗎? 歡迎聯絡我們

相關文章