読者です 読者をやめる 読者になる 読者になる

元フリーエンジニアライフ

Ruby on Rails とか MovableType とかAWSやってるフリーランスウェブエンジニアの記録でした。現在は法人成りしてIT社長。

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

参考

AsyncTaskLoader

AsyncTaskLoaderを利用した非同期処理を行う

AsyncTaskLoaderを使ってみる