使用Android API最佳實踐

jopen 10年前發布 | 36K 次閱讀 Android Android開發 移動開發

寫在前面

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

做什么,如何做?

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

學習

Retrofit

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

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

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

整個過程很簡單,類似發送一次有參數的請求或發送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同步這個工程。
  4. </ol>

    查找或者編寫API

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

    展示輸出

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

    [{"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數據的根元素是個數組,不是對象。所以我只貼出了數組的第一個元素。展示相關的圖片示例。

    使用Android API最佳實踐

    集成POJOs

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

    使用Retrofit下載(解析)API

    創建REST Adapter

    創建Adapter,類似設置endPoint。

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

    定義API接口

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

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

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

    創建Twitch.tv 服務

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

        TwitchTvApiInterface twitchTvService = restAdapter.create(TwitchTvApiInterface.class);

    使用API

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

        twitchTvService.getStreams(ITEMS_PER_PAGE, pageNumber * ITEMS_PER_PAGE, new Callback<List>() {
        @Override
        public void success(List justinTvStreamData, Response response) {
            consumeApiData(justinTvStreamData);
        }

    @Override
    public void failure(RetrofitError retrofitError) {
        consumeApiData(null);
    }});</pre> <p>這里有一點需要注意,Retrofit會在后臺線程下載并解析API數據,根據結果不同(成功或失敗)發送到UI線程。Retrofit也支持在后臺自動下載(這里沒有顯示)。</p>
    

    數據處理趣事

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

    使用Android API最佳實踐

    參考代碼

    示例代碼下載

    感覺有趣嗎?

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


    原文鏈接: meetme   翻譯: 伯樂在線 - imesong
    譯文鏈接: http://blog.jobbole.com/65170/

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!