Android携帯ゲームを作って世界に配信してみよう(5) ―― インターネットからデータをダウンロードするアプリを開発する
●インターネットと通信する
今回の本題である,インターネット上のHTTPサーバに接続してデータをダウンロードする処理は,すべてhttpGetBinaryメソッドにまとめてあります.通信処理の流れを,このメソッドのソース・コードとともに説明します(リスト2).
/** * 指定した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メソッドによる通信処理」を参照してください.