Android携帯ゲームを作って世界に配信してみよう(5) ―― インターネットからデータをダウンロードするアプリを開発する

山田 元康

tag: 組み込み

エレキ系DIY 2012年5月10日

●インターネットと通信する

 今回の本題である,インターネット上のHTTPサーバに接続してデータをダウンロードする処理は,すべてhttpGetBinaryメソッドにまとめてあります.通信処理の流れを,このメソッドのソース・コードとともに説明します(リスト2).

 

リスト2 httpGetBinaryメソッド(BackgroundImage.javaより抜粋)

    /**
     * 指定したURLにGETメソッドでHTTP通信を行い結果をバイナリ形式で返す
     */
    private static byte[] httpGetBinary(final String stringUrl) {
            try {
                final URL url = new URL(stringUrl); // (1)
                final URLConnection connection = url.openConnection(); // (2)

                final InputStream stream = connection.getInputStream(); // (3)

                final byte[] data = toByteArray(stream); // (4)

                stream.close(); // (5)
                return data;

            } catch(final Exception e) { // (6)
                Log.e("Dribble", "url:" + stringUrl, e);
                return null;
            }
    }
 

 

 まず,引き数として渡された文字列で表されたURLに基づいて,URLを管理するURLオブジェクトを生成します〔リスト2(1)〕.

 次に,URLクラスに用意されているopenConnectionメソッドを利用して,指定したURLへの接続を管理するURLConnectionオブジェクトを取得します〔リスト2(2)〕.

 URLConnectionクラスのgetInputStreamを呼び出すと,指定したURLへのHTTP接続が開始されて,HTTPサーバの応答の読み込みを管理するInputStreamクラスが返されます〔リスト2(3)〕.このInputStreamは,第3回の講座でローカル・ファイルの読み込みに利用したものと同じものです.

 InputStreamからすべてのデータを読み込んでバイト配列に格納しますが,この処理は,内部ファイルからの読み込みの際にも全く同じ処理を行うため,toByteArrayメソッドという別メソッドにまとめました〔リスト2(4)〕.このメソッドは,引き数で指定したInputStreamからすべてのデータを読み込み,データ・サイズと同じ長さのバイト配列に格納して,返すメソッドです.

 すべてのデータを読み込んだら,最後にInputStreamクラスのcloseメソッドを呼び出し,終了処理を行います〔リスト2(5)〕.一連の流れの中でエラーが発生した場合は例外が発生するので,最後にそれを捕まえて(catch),ログを出力し,nullを返します〔リスト2(6)〕.

 なお,今回のサンプル・コードは,HTTPプロトコルのGETメソッドによる通信を行っていますが,HTTP通信には,GETメソッドのほかに,フォームの入力内容を送信する際などに利用するPOSTメソッドという方式があります.POSTメソッドについては,稿末のコラム「POSTメソッドによる通信処理」を参照してください.

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! FPGAマガジン No.12『ARMコアFPGA×Linux初体験』好評発売中

FPGAマガジン No.11『性能UP! アルゴリズム×手仕上げHDL』好評発売中! PDF版もあります

PICK UP用語

EV(電気自動車)

関連記事

EnOcean

関連記事

Android

関連記事

ニュース 一覧を見る
Tech Villageブログ

渡辺のぼるのロボコン・プロモータ日記

2年ぶりのブログ更新w

2016年10月 9日

Hamana Project

Hamana-8最終打ち上げ報告(その2)

2012年6月26日