自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android API 最佳使用實踐與學(xué)習(xí)

移動開發(fā) Android
Android應(yīng)用程序中集成第三方API已十分流行。應(yīng)用程序都有自己的網(wǎng)絡(luò)操作和緩存處理機制,但是大部分比較脆弱,沒有針對網(wǎng)絡(luò)糟糕情況進行優(yōu)化。

現(xiàn)在,Android應(yīng)用程序中集成第三方API已十分流行。應(yīng)用程序都有自己的網(wǎng)絡(luò)操作和緩存處理機制,但是大部分比較脆弱,沒有針對網(wǎng)絡(luò)糟糕情況進行優(yōu)化。感謝Square lnc 這家有創(chuàng)新精神的公司,將信用卡商業(yè)交易帶到手機上?,F(xiàn)在有了一系列高質(zhì)量開源庫,支持在Android應(yīng)用程序中集成。

做什么,如何做?

現(xiàn)在,我們要依次學(xué)習(xí)使用Retrofit、OKHttp和GSON,簡單快速的集成REST API。使用這個組合,我們需要從Twitch.tv下載并解析一些數(shù)據(jù)。跟著下面的步驟可以在幾分鐘內(nèi),不用寫繁瑣的模板代碼,完成大部分的REST API集成。

學(xué)習(xí)

Retrofit

Retrofit簡化了從Web API下載數(shù)據(jù),解析成普通的Java對象(POJO)。例如,要從GitHub 上下載用戶倉庫的信息,你只需要編寫下面的幾行:

  1. @GET("/users/{user}/repos"
  2. List listRepos(@Path("user") String user); 

另外,你需要創(chuàng)建倉庫信息類和數(shù)據(jù)類型。這些代碼也可以自動生成,下面會介紹如何自動生成。

整個過程很簡單,類似發(fā)送一次有參數(shù)的請求或發(fā)送POST或HEAD。如何連接不同類型的API,請查看說明文當(dāng)。

Retrofit的特性之一可以將處理邏輯添加到請求和響應(yīng)中。你可以添加數(shù)據(jù)到http請求頭部,也可以攔截驗證失敗的響應(yīng)重定向到登錄界面。

OKHttp

OKHttp是Android版Http客戶端。 非常高效,支持SPDY、連接池、GZIP和 HTTP 緩存。默認情況下,OKHttp會自動處理常見的網(wǎng)絡(luò)問題,像二次連接、SSL的握手問題。如果你的應(yīng)用程序中集成了OKHttp,Retrofit默認 會使用OKHttp處理其他網(wǎng)絡(luò)層請求。

GSON

GSON是將JSON解析成POJO的Java庫。GSON也可以將POJO解析成JSON。在Android中,數(shù)據(jù)對象存儲在SharePreference更加方便。

要使用GSON,首先需要創(chuàng)建相應(yīng)的POJO數(shù)據(jù),再用GSON解析為POJO對象。解析過程簡單且非常高效。需要了解如何創(chuàng)建可以被GSON解析的POJO對象,請查看說明文檔。Retrofit使用GSON解析JSON數(shù)據(jù)。

開始Coding

添加庫文件到工程

  1. 下載RetrofitOKHttp、GSON庫文件。
  2. 逐個添加jar文件到你的工程中。
  3. 如果使用Android Studio,可以使用gradle同步這個工程。

查找或者編寫API

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

展示輸出

展示一些API返回的數(shù)據(jù),下面的示例是由于是一個GET請求,只能在瀏覽器中運行,返回數(shù)據(jù)如下:

  1. [{"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 

創(chuàng)建POJO

這部分很有趣,用我們獲取到的數(shù)據(jù)自動創(chuàng)建對應(yīng)的POJO。使用jsonschema2pojo,導(dǎo)入包名、類名和JSON數(shù)據(jù),保存為私有類型。示例中展示的構(gòu)造器無法使用,因為JSON數(shù)據(jù)的根元素是個數(shù)組,不是對象。所以我只貼出了數(shù)組的***個元素。展示相關(guān)的圖片示例。

POJO-Generator

集成POJOs

將自動產(chǎn)生的POJOs粘貼到工程中就可以了。在我的示例工程中,他們在models包中。

使用Retrofit下載(解析)API

創(chuàng)建REST Adapter

創(chuàng)建Adapter,類似設(shè)置endPoint。

  1. RestAdapter restAdapter = new RestAdapter.Builder() 
  2. .setEndpoint("http://api.justin.tv/api"
  3. .build(); 

定義API接口

為需要連接的endPoint定義接口。下面示例中,使用limit和offset,這兩個參數(shù)用來控制請求數(shù)據(jù)位置和大小。詳細說明請參考API文檔。

  1. public interface TwitchTvApiInterface { 
  2. @GET("/stream/list.json"
  3. void getStreams(@Query("limit"int limit, @Query("offset"int offset, Callback<List> callback);} 

你可能會注意到,我們期望返回的是一組JustinTvStreamData對象,也就是我們剛才自動產(chǎn)生的POJO。關(guān)于如何定義這個接口的更多信息,請參考Retrofit說明文檔。

創(chuàng)建Twitch.tv 服務(wù)

現(xiàn)在我們已經(jīng)建立了endPoint,定義了需要的接口。下面需要創(chuàng)建Twitch.TV服務(wù),發(fā)送請求。

  1. TwitchTvApiInterface twitchTvService = restAdapter.create(TwitchTvApiInterface.class

使用API

發(fā)送API請求十分簡單,只需要使用剛才創(chuàng)建的服務(wù)即可。

  1. twitchTvService.getStreams(ITEMS_PER_PAGE, pageNumber * ITEMS_PER_PAGE, new Callback<List>() { 
  2. @Override 
  3. public void success(List justinTvStreamData, Response response) { 
  4.     consumeApiData(justinTvStreamData); 
  5.   
  6. @Override 
  7. public void failure(RetrofitError retrofitError) { 
  8.     consumeApiData(null); 
  9. }}); 

這里有一點需要注意,Retrofit會在后臺線程下載并解析API數(shù)據(jù),根據(jù)結(jié)果不同(成功或失?。┌l(fā)送到UI線程。Retrofit也支持在后臺自動下載(這里沒有顯示)。

數(shù)據(jù)處理趣事

現(xiàn)在我們用POJO數(shù)據(jù)做一些有趣的事情。在這個Demo中,展示了Twitch.Tv頻道的圖片和描述,使用Picasso Library 下載緩存圖片。

TwitchClient-576x1024

參考代碼

示例代碼下載

責(zé)任編輯:閆佳明 來源: blog.jobbole
相關(guān)推薦

2016-12-27 08:49:55

API設(shè)計策略

2013-06-13 09:21:31

RESTful APIRESTfulAPI

2023-11-07 07:08:57

2017-03-13 14:09:19

RESTful API實踐

2014-12-17 09:46:30

AndroidListView最佳實踐

2018-12-04 09:00:00

API安全性令牌

2017-03-30 13:01:54

混合云學(xué)習(xí)實踐

2009-07-07 16:13:39

JDK日志

2017-04-27 10:33:50

云計算

2023-04-14 12:23:15

2012-12-24 09:49:08

SaaSSaaS安全

2018-09-28 05:18:41

2016-06-20 11:32:27

JS原型class

2017-02-06 09:20:23

JavaScript實踐

2017-05-19 10:03:31

AndroidBaseAdapter實踐

2017-05-18 12:36:16

android萬能適配器列表視圖

2014-03-17 16:53:34

2009-07-29 17:52:29

ibmdwJava

2017-02-16 08:36:24

API威脅機器學(xué)習(xí)

2023-12-06 07:13:16

RESTAPI客戶端
點贊
收藏

51CTO技術(shù)棧公眾號