世界を目指せ!Androidアプリ開発入門

第9回 AndroidでHTTP通信を行う

この記事を読むのに必要な時間:およそ 3.5 分

では,詳しく見ていきます。

まずは,HttpPostクラスの第一引数にURLを指定してクラスを生成して,POSTメソッドを使用する準備を行います。

HttpPost method = new HttpPost( url );

次に,Content-Typeヘッダに「application/x-www-form-urlencoded」を指定して,POSTするデータをx-www-form-urlencoded形式で送信するようにします。

paramEntity.setContentType( "application/x-www-form-urlencoded" );

以降の実装は,GETメソッドと大差ありませんが,以下のようにDefaultHttpClientのexecuteメソッドを呼び出します。

HttpResponse response = client.execute( method );

executeメソッドを実行するとレスポンスコードを返すので,正しく実行された確認します。

int status = response.getStatusLine().getStatusCode();
if ( status != HttpStatus.SC_OK )
    throw new Exception( "" );

最後は,以下のように結果を文字列に変換して,returnで返しています。

return EntityUtils.toString( response.getEntity(), "UTF-8" );

Webサービスと連携する

HTTPプロトコルのGETとPOSTの実装方法が把握できたので,さらに歩踏み込んでWebサービスとの連携例をご紹介します。

Webサービスと連携する場合,データなどのやりとりにXMLを用いるのが一般的です。

Android OSには,XMLパーサの「SOX」が搭載されているので,これでXMLが取り扱えますが,スマートフォンにとってXMLの解析処理は重荷で,大量のデータを解析する場合は処理時間がかかります。

Android OSには,JSONパーサも搭載されているので,連携先がJSONにも対応しているのであれば,こちらを使うことをお勧めします。JSONは,XMLと比較するとデータの表現が単純なので,大量のデータでも処理負荷が低く短時間で処理が行えるので,スマートフォン向きです。また,データ表現が単純な分,プログラム単純になるので,処理速度面だけではなく,品質や保守性を向上させる意味でも有利になります。

参考として,以下にJSON形式のデータを処理している例を示します。

{"subscriptions":[{"id":"feed/http://feeds.feedburner.jp/cnet/rss","title":"CNET Japan","categories":[],"sortid":"BB146333","firstitemmsec":"1230135778214"},{"id":"feed/http://feeds.feedburner.jp/netafull","title":"[N]ネタフル","categories":[{"id":"user/13019141600096008010/label/News","label":"News"}],"sortid":"701D2BE4","firstitemmsec":"1262173951833"}]}


class JSubscriptionsHandler
{
    public List<TagObject> entries;

    public JSubscriptionsHandler() {
    }

    public boolean parse( String istring ) {
        JSONArray    jArray;

        try {
            jArray = new JSONObject( istring ).getJSONArray( "subscriptions");

            int max = jArray.length();
            entries = new ArrayList<TagObject>( max );
            for ( int i = 0; i < max; i++ )
            {
                JSONObject jsonObj = jArray.getJSONObject(i);
                
                if( jsonObj.getJSONArray("categories").length() > 0 )
                    continue;
                
                entries.add( new TagObject(
                        -1, 0,
                        jsonObj.getString("title"),
                        "0",
                        jsonObj.getString("sortid"),
                        jsonObj.getString("id") ));
            }
            return true;
        } catch (JSONException e) {
            Log.d("NetaShare", e.getMessage());
            return false;
        }
        
    }
}

まとめ

今回は,org.apache.httpを使い,以下のご説明をしました。

  • GETメソッドの実装
  • POSTメソッドの実装
  • Webサービスとの連携例

GET,POSTメソッドの実装は簡易なサンプルでしたが,共通部分が多いので実装方法を理解して頂けたと思います。

Webサービスとの連携例では,XMLではなくJSONを使うことをお勧めしました。

実際,筆者が開発に関係しているNetaShareでも,XMLからJSONに移行したことで,パフォーマンス向上が見られたので,連携先が対応しているのであればJSONがお勧めです。

著者プロフィール

傍島康雄(そばじまやすお)

5月30日生まれ。

モバイルデバイスが大好物。それで動くアプリの開発に喜びを感じている。スマートフォン前夜のWindows Mobile,PalmOSのアプリに情熱を傾けていたが,最近は停滞気味でコードを書くよりも文章を書く機会が多くなっており,文章を書くのも,プログラミングと同じくらい奥深い作業だと感じている。

ブログ:http://yasuos.com/blog/