2013年8月8日木曜日

Androidの新機能を使ってみよう(Volley編)を講演しました

チームEGGの曽川です。

Androidの新機能を使ってみよう(Volley編)を講演しました。
YouTubeで検索した動画を表示するデモアプリを作りました。

今回の講演で使用した資料です。
http://goo.gl/9GNkM0

サンプルアプリ
https://bitbucket.org/mobaegg/android_seminar_20130808
Volley
https://android.googlesource.com/platform/frameworks/volley

特にVolleyのキャンセルのハマリポイントは要注意です。
また、深い話はできませんでしたが、セッションCookieを扱ったり、
オレオレ証明書を通したりはHurlStack#createConnectionをオーバライドし、
通信して取得したデータを整形したり、DBと連携させたりする場合は
Request#parseNetworkResponseをカスタマイズすると良いと思います。

配布したコードについて補足

VolleyRequestHolder
講演の中で何回も使いましたが、これはVolleyの標準APIではありません。
RequestQueueはシングルトンにせよ。という話なので作成しました。
アプリ内共通でセッションCookieを扱ったり、オレオレ証明書を使う場合は、Volley#RequestQueueの第二引数にそれを行うHttpStackオブジェクトを渡します。
※sigletonなのにContextを渡しているので一瞬「おや?」と思うかもしれませんが、このContextはキャッシュディレクトリやパッケージ名を取得するために使うだけで、Context自体を保持するわけではないので問題ありません。

GsonRequest
こちらも今回の講演の主要コードですが、標準APIではありません。(元コード
通信が成功するとparseNetworkResponseが呼び出されます。その時にメソッド内でGSONを使ってオブジェクトに変換しています。
parseNetworkResponse内は非同期になっているので、通信とDBの連携などを行う際はこちらに記述すると良いかと思います。

ImageNoCache
サムネイルを表示する際に一瞬だけ登場したクラスです。
NetworkImageViewは画像のキャッシュを行うのですが、このコードは自分で作成する必要があります。
今回はキャッシュする必要性がなかったので、キャッシュについて何もしないクラスを作りました。
時間があれば試そうかと思ってたのですが、キャッシュのサンプルとして以下サイトのBitmapCache.javaを組み込んでいます。
Android Tips #51 ネットワーク通信・キャッシュ処理をより速く、簡単に実装できるライブラリ “Volley” を使ってみた