AndroidアプリにサードパーティのAPIを統合することは、現在非常に人気があります。アプリは独自のネットワーク操作とキャッシュ処理メカニズムを持っていますが、そのほとんどはかなり脆弱で、悪いネットワーク条件に対して最適化されていません。クレジットカードによる商取引を携帯電話にもたらした革新的な企業、 おかげです。現在、Androidアプリへの統合をサポートする高品質なオープンソースライブラリが充実しています。
何をどうすべきか?
それでは、Retrofit、OKHttp、ONを順番に使って、シンプルで高速なAPI統合を学びましょう。この組み合わせを使って、Twitch.tvからデータをダウンロードして解析する必要があります。以下のステップに従えば、面倒な定型コードを書かなくても、REST API統合のほとんどを数分で行うことができます。
学ぶ
レトロフィット
Retrofitは Web API からデータをダウンロードし、通常の Java オブジェクトにパースするのを簡単にします。たとえば GitHub からユーザーのリポジトリ情報をダウンロードするには、次のように書くだけです:
@GET("/users/{user}/repos")
List listRepos(@Path("user") String user);
さらに、ウェアハウス情報のクラスとデータ型を作成する必要があります。このコードは自動生成することもでき、その方法は後述します。
全体のプロセスは非常にシンプルで、パラメータ付きのリクエストを送信したり、POSTやHEADを送信したりするのと似ています。異なるタイプのAPIに接続する方法については説明テキストは参照してください。
Retrofitの機能のひとつで、リクエストやレスポンスに処理ロジックを追加することができます。httpリクエストヘッダにデータを追加したり、認証に失敗したレスポンスをインターセプトしてログイン画面にリダイレクトしたりできます。
OKHttp
tpはバージョンの tp クライアントです。 非常に効率的で、SPDY、コネクションプーリング、GZIP、HTTP キャッシュをサポートしています。デフォルトでは、OKHttp は二次接続や SL ハンドシェイクのような一般的なネットワーク問題を自動的に処理します。アプリケーションに統合されると、デフォルトで OKHttp を使って他のネットワーク層のリクエストを処理します。
GSON
GSON、JSONをPOJOにパースするJavaライブラリです。GSONは、POJOをJSONにパースすることもできます。Androidでは、SharePreferenceにデータオブジェクトを格納する方が便利です。
GSON を使うには、まず対応する POJO データを作成し、GSON を使って POJO オブジェクトをパースする必要があります。パース処理はシンプルで非常に効率的です。GSON でパースできる POJO オブジェクトの作成方法については、Retrofit が GSON を使って JSON データをパースする説明 ドキュメント参照してください。
コーディング開始
プロジェクトへのライブラリの追加
- Retrofit、OKHttp、GSONライブラリファイルのダウンロード。
- プロジェクトにjarファイルを1つずつ追加します。
- Android Studioを使用している場合は、gradleを使用してこのプロジェクトを同期できます。
APIの検索と作成
ディスプレイ出力
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-..net/jtv_user_pictures/xpeke-profile_image-a182a5fe5a8f239b-.jpeg", "timezone": "Europe/Madrid", "screen_cap_url_huge": 「http://static
POJOの作成
jsonschema2pojo使用して、パッケージ名、クラス名、JSONデータをインポートし、private型として保存します。JSONデータのルート要素はオブジェクトではなく配列なので、例に示したコンストラクタは動作しません。そのため、配列の *** 要素のみを掲載しています。関連するイメージ例を表示します。
POJOの統合
RetrofitでAPIをダウンロード
REST アダプタの作成
アダプタの作成は、エンドポイントの設定と似ています。
RestAdapter restAdapter = new RestAdapter.Builder()
.setEndpoint("http://..tv/api")
.build();
APIインターフェースの定義
public interface TwitchTvApiInterface {
@GET("/stream/list.json")
void getStreams(@Query("limit") int limit, @Query("offset") int offset, Callback<List> callback);}
Twitch.tvサービスの作成
これでエンドポイントが作成され、必要なインターフェースが定義されました。次に、リクエストを送信する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);
}});
ここでひとつ注意すべきことは、RetrofitはバックグラウンドのスレッドでAPIデータをダウンロードして解析し、その結果に応じてUIスレッドに送信するということです。Retrofitはバックグラウンドでの自動ダウンロードもサポートしています。
データ処理の基礎知識
では、POJOデータで面白いことをやってみましょう。Twitch.Tvチャンネルのイメージと説明を表示するこのデモでは、Picassoライブラリを 使用してキャッシュされたイメージをダウンロードします。
サンプルコードのダウンロード





