使用Android API最佳實踐
寫在前面
現在,Android應用程式中整合第三方API已十分流行。應用程式都有自己的網路操作和快取處理機制,但是大部分比較脆弱,沒有針對網路糟糕情況進行優化。感謝Square lnc 這家有創新精神的公司,將信用卡商業交易帶到手機上。現在有了一系列高質量開源庫,支援在Android應用程式中整合。
做什麼,如何做?
現在,我們要依次學習使用Retrofit、OKHttp和GSON,簡單快速的整合REST API。使用這個組合,我們需要從Twitch.tv下載並解析一些資料。跟著下面的步驟可以在幾分鐘內,不用寫繁瑣的模板程式碼,完成大部分的REST API整合。
學習
Retrofit
123 | ;html-script:false]@GET("/users/{user}/repos")List |
另外,你需要建立倉庫資訊類和資料型別。這些程式碼也可以自動生成,下面會介紹如何自動生成。
整個過程很簡單,類似傳送一次有引數的請求或傳送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
新增庫檔案到工程
- 逐個新增jar檔案到你的工程中。
- 如果使用Android Studio,可以使用gradle同步這個工程。
查詢或者編寫API
你可能已有一份API,如果你還在尋找API目錄,我推薦ProgrammableWeb。在這個教程中,我們會解析Twitch.Tv的資料流。請求格式請參考說明手冊。Twicht.tv請求資料流的JSON格式:
http://api.justin.tv/api/stream/list.json
展示輸出
展示一些API返回的資料,下面的示例是由於是一個GET請求,只能在瀏覽器中執行,返回資料如下:
JavaScript12 | ;html-script:false][{"broadcast_part":4,"featured":true,"channel_subscription":true,"audio_codec":"uncompressed","id":"6640712464","category":"gaming","title":"Fnatic xPeke, Normals(ranked down) on smurf","geo":"DE","video_height":1080,"site_count":8014,"embed_enabled":true,"channel":{"subcategory":null,"producer":true,"image_url_huge":"http://static-cdn.jtvnw.net/jtv_user_pictures/xpeke-profile_image-a182a5fe5a8f239b-600x600.jpeg","timezone":"Europe/Madrid","screen_cap_url_huge":“http://static |
建立POJO
這部分很有趣,用我們獲取到的資料自動建立對應的POJO。使用jsonschema2pojo,匯入包名、類名和JSON資料,儲存為私有型別。示例中展示的構造器無法使用,因為JSON資料的根元素是個陣列,不是物件。所以我只貼出了陣列的第一個元素。展示相關的圖片示例。
整合POJOs
將自動產生的POJOs貼上到工程中就可以了。在我的示例工程中,他們在models包中。
使用Retrofit下載(解析)API
建立REST Adapter
建立Adapter,類似設定endPoint。
Java1234 | ;html-script:false]RestAdapter restAdapter=newRestAdapter.Builder().setEndpoint("http://api.justin.tv/api").build(); |
定義API介面
為需要連線的endPoint定義介面。下面示例中,使用limit和offset,這兩個引數用來控制請求資料位置和大小。詳細說明請參考API文件。
Java1234 | ;html-script:false]publicinterfaceTwitchTvApiInterface{@GET("/stream/list.json")voidgetStreams(@Query("limit")intlimit,@Query("offset")intoffset,Callback<List>callback);} |
你可能會注意到,我們期望返回的是一組JustinTvStreamData物件,也就是我們剛才自動產生的POJO。關於如何定義這個介面的更多資訊,請參考Retrofit說明文件。
建立Twitch.tv 服務
現在我們已經建立了endPoint,定義了需要的介面。下面需要建立Twitch.TV服務,傳送請求。
Java12 | ;html-script:false]TwitchTvApiInterface twitchTvService=restAdapter.create(TwitchTvApiInterface.class); |
使用API
傳送API請求十分簡單,只需要使用剛才建立的服務即可。
Java1234567891011 | ;html-script:false]twitchTvService.getStreams(ITEMS_PER_PAGE,pageNumber*ITEMS_PER_PAGE,newCallback<List>(){@Overridepublicvoidsuccess(List justinTvStreamData,Response response){consumeApiData(justinTvStreamData);}@Overridepublicvoidfailure(RetrofitError retrofitError){consumeApiData(null);}}); |
這裡有一點需要注意,Retrofit會在後臺執行緒下載並解析API資料,根據結果不同(成功或失敗)傳送到UI執行緒。Retrofit也支援在後臺自動下載(這裡沒有顯示)。
資料處理趣事
現在我們用POJO資料做一些有趣的事情。在這個Demo中,展示了Twitch.Tv頻道的圖片和描述,使用Picasso Library 下載快取圖片。
參考程式碼
感覺有趣嗎?
你有發現這類工作很有趣嗎?你是否喜愛古樸的賓夕法尼亞雄鹿?你是一名出色的Android開發者嗎? 歡迎聯絡我們。
相關推薦
使用Android API最佳實踐
寫在前面 現在,Android應用程式中整合第三方API已十分流行。應用程式都有自己的網路操作和快取處理機制,但是大部分比較脆弱,沒有針對網路糟糕情況進行優化。感謝Square lnc 這家有創新精神的公司,將信用卡商業交易帶到手機上。現在有了一系列高質量開源庫,支
RESTful API 最佳實踐
理解 one isp ice any best log style .html RESTful API 最佳實踐http://www.ruanyifeng.com/blog/2018/10/restful-api-best-practices.htmlRESTful API
Android MVP 最佳實踐
作者 Tamic MVC 起源和發展! MVP其實我接觸已經三年了,本文的實踐也是在17年實踐的,今天放出來也是為了分享給需要這快東西的同學,面試足夠了,好東西不能雪藏。 1 起源 MVC:全稱:Model - View - Controller,它是於1970年的時候有TrygveReen
Android效能最佳實踐:為您的APK進行瘦身
大家都知道開發中應用程式的效能是非常重要的,但是這也是優化提升的難點,本章針對 Android效能實踐——從減少APK的大小開始,提升使用者的體驗。 原文地址 https://developer.android.com/topic/performance/reduce-apk-
【轉載】RESTful API 最佳實踐
作者: 阮一峰 日期: 2018年10月 3日 RESTful 是目前最流行的 API 設計規範,用於 Web 資料介面的設計。 它的大原則容易把握,但是細節不容易做對。本文總結 RESTful 的設計細節,介紹如何設計出易於理解和使用的 API。
Android 開發最佳實踐經驗分享
從Futurice公司Android開發者中學到的經驗。 遵循以下準則,避免重複發明輪子。若你對開發iOS或Windows Phone 有興趣, 請看iOS Good Practices 和 Windows client Good Practices 這兩篇文章。 摘要
REST與RESTFul API最佳實踐
我經常會面試一些做PHP的開發者,讓我很奇怪的是,10個人總有8個多不知道什麼是REST服務,甚至是沒有聽說過。但RESTFul API已經是現在互聯網裡對外開放介面的主流模式,可參考: 數一數年限,據我接觸REST到現在也差不多有8年左右了。可能
Android SharedPreferences最佳實踐
Android開發中,我們經常會用到SharedPreferences,它是一種輕量的資料儲存方式,通常用來儲存一些簡單的配置資訊。看了網路上的一些文章,感覺都不是特別滿意,因此希望能結合自己的經驗和理解寫一篇分析SharedPreferences的文章。
RESTFul API最佳實踐
RESTful API最佳實踐 RESTful API 概述 基本概念 REST 英文全稱:Representational State Transfer,直譯為:表現層狀態轉移。首次是由Roy Thomas Fielding在他2000年的博士論文中提出。 REST是一種描述網路中client和server
ASP.NET Core Web API 最佳實踐指南
原文地址: ASP.NET-Core-Web-API-Best-Practices-Guide 介紹 當我們編寫一個專案的時候,我們的主要目標是使它能如期執行,並儘可能地滿足所有使用者需求。 但是,你難道不認為建立一個能正常工作的專案還不夠嗎?同時這個專案不應該也是可維護和可讀的嗎? 事實證明,我們需
Android最佳實踐之性能 - 多線程
ndt andro 單位 多線程 same Coding amount other err 在單獨線程執行代碼 參考地址:http://developer.andr
RESTful API 設計最佳實踐
並不是 要求 關於 bin 是我 最好 實用 link keep 數據模型已經穩定,接下來你可能需要為web(網站)應用創建一個公開的API(應用程序編程接口)。需要認識到這樣一個問題:一旦API發布後,就很難對它做很大的改動並且保持像先前一樣的正確性。現在,網絡上有很
Android 應用兼容性最佳實踐 | 中文教學視頻
-s 播放 新特性 cmp 一起 更多 ide tar video 本期中文視頻向各位開發者介紹如何現代化您的應用,其中包括 Android?O、Android P?(預覽版)?的新特性、行為變更、應用開發中常見的兼容性最佳實踐,以及測試、兼容系統時需要註意的一些事項。希
11. RESTful API 設計最佳實踐
API 設計規範 API 設計規範 URI 的設計 過濾、排序和搜尋等資訊 響應和錯誤處理 版本控制(delete) 認證 快取 未完待續… 其他規範可參考
編寫 Node.js Rest API 的 10 個最佳實踐
Node.js 除了用來編寫 WEB 應用之外,還可以用來編寫 API 服務,我們在本文中會介紹編寫 Node.js Rest API 的最佳實踐,包括如何命名路由、進行認證和測試等話題,內容摘要如下: 正確使用 HTTP Method 和路由 正確的使用 HTTP 狀態碼 使用 HTTP H
RESTful API 設計指南——最佳實踐
RESTful API 設計指南——最佳實踐 Facebook、谷歌、Github、Netflix 和幾個其他的科技巨頭已經允許開發者和其產品通過 API 呼叫他們的資料,併為他們提供平臺。即使你不是寫 API 的專業人士,擁有精美的 API 也對你的應用程式有好處。 關於設計 API 的最
(Android第一行程式碼實驗一)活動的最佳實踐
活動的最佳實踐 1.知曉當前是在哪一個活動 這個技巧將教會你,如何根據程式當前的介面就能判斷出這是哪一個活動。 首先需要新建一個 BaseActivity 繼承自
Android學習之基礎知識七—碎片的最佳實踐
一、Android碎片(Fragment)的最佳實踐——簡易版新聞應用 第一步:新建FragmentBestPractice專案,在app/build.gradle當中新增:RecyclerView 依賴庫,注意:新增完成後,一定要記住點選右上角的:Sync now 第二步:建立新聞實體類 第三
安卓專案實戰之Gif圖片載入的最佳實踐android-gif-drawable開源庫的使用
前言 在平時的專案開發中,我們或多或少會遇到載入gif圖片這樣的需求,但是Android的ImageView又無法直接載入Gif圖片,面對這樣的需求我們一般都會想到使用支援載入gif動圖的Glide第三方庫來進行實現,但是使用過程中發現Glide在載入大的gif
Android 底部導航欄(底部Tab)最佳實踐
本文目錄.png 當開始一個新專案的時候,有一個很重要的步驟就是確定我們的APP首頁框架,也就是使用者從桌面點選APP 圖示,進入APP 首頁的時候展示給使用者的框架,比如微信,展示了有四個Tab,分別對應不同的板塊(微信、通訊錄、發現、我),現在市面出了少部分的Mate