タケユー・ウェブ日報

Ruby on Rails や Flutter といったWeb・モバイルアプリ技術を武器にお客様のビジネス立ち上げを支援する、タケユー・ウェブ株式会社の技術ブログです。

AndroidアプリでWebAPIからデータを取得するには?

自分用学習メモ。

WebAPIにアクセスしてデータを取得&表示するには

HTTP GET

  • Androidアプリではメインスレッドからのネットワーク処理はできない(3.0以上)
  • 非同期スレッドを扱うのにはAsyncTaskLoaderを用いる方法がCoolらしい
  • AsyncTaskLoaderを継承して独自のクラスを作りそこで処理を記述する

指定したURLにGETリクエストを送信して結果を得るAsyncTaskLoader

AsyncTaskLoaderを継承したローダークラスを以下のように作成する。

  • コンストラクタで必要なパラメータ(今回はURL)を受け取る
  • 結果の型を指定(ジェネリッククラス)
  • loadInBackgorund()抽象メソッドをオーバーライドし、非同期処理の内容を記述

ローダークラスを使う

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を使ってみる