AndroidアプリでWebAPIからデータを取得するには?
自分用学習メモ。
WebAPIにアクセスしてデータを取得&表示するには
HTTP GET
- Androidアプリではメインスレッドからのネットワーク処理はできない(3.0以上)
- 非同期スレッドを扱うのには
AsyncTaskLoader
を用いる方法がCoolらしい - AsyncTaskLoaderを継承して独自のクラスを作りそこで処理を記述する
指定したURLにGETリクエストを送信して結果を得るAsyncTaskLoader
AsyncTaskLoaderを継承したローダークラスを以下のように作成する。
ローダークラスを使う
LoaderManagerを通して操作する。LoaderManagerはActivity.getLoaderManager()
によって取得できる。
LoaderManager loaderManager = getLoaderManager()
LoaderManagerを取得したら、initLoader()
またはrestartLoader()
を呼びます。すると引数で指定したクラスのコールバックが順次呼ばれるので、適切な処理を実装します。(引数で指定するクラスはLoaderCallbacks()
インタフェースを実装する)
まずはLoaderを生成するためのonCreateLoader
が呼ばれるので、使いたいローダーのインスタンスを生成して返す。するとLoaderManager側でそのインスタンスを使用して処理を行い、後続のコールバックが順次実行される。
結果取得
ローダーによって結果を取得したら、それを解析してプログラムで扱えるオブジェクトにしたい。
LoaderManagerにより、ローダーから結果が得られると、onLoadFinished()
コールバックが実行されるので、ここに必要な処理を実装する。
解析(JSON)
JavaではJacksonというライブラリの評判良いみたい。
IntelliJ IDEA 13 + Androidプラグイン環境でJacksonを使う
画面に表示
Adapterを介してListViewを更新するとか、MapFragmentにマーカーを追加するとか。
AsyncTaskLoader
参考