2015年7月18日土曜日

Android開発 JSONをVolleyで取得して、お天気アプリを作る

JSONデータを返すAPIを叩いて、ビューに表示するだけの簡単なAndroidサンプルアプリです。
APIを叩くときには、Androidの非同期HTTP通信ライブラリである”Volley”を使います。
今回のアプリは、この、Volleyのトレーニング目的で作ってみました。
APIは、livedoor 天気情報のAPIを利用します。(http://weather.livedoor.com/weather_hacks/webservice

さて、このVolleyとはいったい何でしょうか?
こちらの記事が参考になります。

ネットワーク通信用ライブラリVolleyを使いこなす | Tech Booster
http://techbooster.org/android/hacks/16474/
Android SDKでは非同期処理(またはマルチスレッド化)のための機構が用意されています。AsyncTaskやService、それらを拡張したAsyncTaskLoader、IntentServiceが代表的です。さらに汎用的に使えるHandler、ApacheのHttpClient、JavaのExecutorService、Threadなど非同期処理のための仕組みが豊富に存在していますが非同期でのキャンセル処理や取得済みデータのキャッシュ方法など周辺技術と組み合わせて設計しないといけません。
Android SDKの標準APIは応用力が高いのですが、習得するまでの難しさ、エラー処理、各バージョンごとの実装差異が存在しています。これらの課題を解消するためにVolleyライブラリが作られました。
以前、Apache HTTP Client(DefaultHttpClient)を使ったサンプルアプリを作ったことがあるのですが、どうやら、最近のAndroidでは、メインスレッドからネットワーク処理を行うことを許していないそうで。別スレッドを立ち上げてHTTPの処理を実行したり、さらに、これが別スレッドであるがためにViewに情報を渡そうとすると、ハンドラを生成したりと案外面倒だった記憶があります。Volleyは、この複雑だった処理を簡潔に書けるようにします。
Volleyは、ネットワークリクエストとキャッシュをスレッドプールを使って、それぞれの通信処理をリクエストという単位でキューイングして処理を捌きます。そして、コールバックで処理結果がUIスレッドに渡されます。
ネットワーク経由で取得した情報をビューへ渡すための処理をVolleyに任せる感じです。

Android StudioのプロジェクトにVolleyを導入

app/build.gradleファイルを編集、compile行を追記。
dependencies {
    ...
    compile 'com.android.volley:volley:1.0.0'
}
この状態で、Android StudioのメニューからBuild -> Make Projectしてみてください。エラーが出なかったらVolleyライブラリ導入成功です。

Volleyを使ったサンプルコード

以下、サンプルコードです。
以下の資料を参考にしました。

Transmitting Network Data Using Volley | Android Developers
https://developer.android.com/training/volley/index.html
Android working with Volley Library
http://www.androidhive.info/2014/05/android-working-with-volley-library-1/
Volleyについて調べる(1) - 未処分利益
http://www.vagrantup.jp/entry/2013/12/07/164310
Volley 基礎 (Android アプリ用ネットワークライブラリ) - ひだまりソケットは壊れない
http://vividcode.hatenablog.com/entry/android-app/volley-basis
Android - Volleyの起動・停止・キャンセル - Qiita
http://qiita.com/ueno-yuhei/items/d81dc638951ce3f6988a
ケーワン・エンタープライズのエンジニアメモ(`・ω・´)ゞビシッ!!: Volleyを使ってみる(JsonArrayRequest、JsonObjectRequest編)
http://k-1-ne-jp.blogspot.jp/2013/09/volleyjsonrequestjsonarrayrequestjsonob.html
【Android】Volleyを使ってネットワーク通信 その2 実装編【ライブラリ】 | 手巻き式IT
http://temakishiki.com/?p=141