Android携帯ゲームを作って世界に配信してみよう(5) ―― インターネットからデータをダウンロードするアプリを開発する
Column 2 URLクラスとURLConnectionクラスの重要なメソッド
今回利用したURLクラスとURLConnectionクラスの重要なメソッドを簡単に説明します.
●URLクラス
URLとは,Uniform Resource Locator(ユニフォーム・リソース・ロケータ)の略で,インターネット上のさまざまなリソースのアドレスのことです.URLの頭の部分には,プロトコル(アドレス)の種別が,「プロトコル名」+":"という形で記述されています.皆さんがよく見かけるURLは,HTTPプロトコル形式で記されたインターネット・サイトなどのアドレスではないでしょうか? HTTPプロトコルのURLは,「http://」や「https://」といった形で記述されます.
URLは文字列でも表すことができますが,文字列形式ではなくURLクラスを使うケースは主に次の2点です.
まず一番重要な利用シーンは,URLで指定されたサーバに接続する場合です.この場合は,openConnectionというメソッドを利用します(表A).
表A openConnectionメソッド
呼び出し形式 | public URLConnection openConnection() throws IOException |
処理内容 | URLがHTTPプロトコルのURL(「http://」もしくは「https://」で始まるURL)である場合は,URLが指定するHTTPサーバへの接続を管理するURLConnectionオブジェクトを返す |
パラメータ | なし |
戻り値 | URLConnectionを継承したHTTP接続を管理する専用のクラスHttpURLConnectionのインスタンスが返される |
例外 | IOException - 入出力例外が発生した場合 |
それ以外には,URLクラスのgetProtocolメソッド,getHostメソッドなどを使って,URLに記述されているプロトコルやホスト,パスなどを取得したい場合などです.文字列形式で表現されたURLをURLクラスに変換することで,文字列を解析し,必要な情報を取得できます.
●URLConnectionクラス
URLConnectionクラスは,URLで表されるインターネット上のリソースへの接続を管理するクラスです.このクラスは抽象クラスであり,このクラスを継承して,各URLのプロトコルに応じた専用クラスであるHttpURLConnectionクラスやHttpsURLConnectionクラスなどが用意されています.
使い方は次の通りです.まず,接続したいURLのオブジェクトのopenConnectionメソッドを呼び出し,接続を管理するURLConnectionオブジェクトを取得します.なお実際には,URLのプロトコル種別に応じた,URLConnectionを継承した専用のクラスのインスタンスが返されます.例えば,「http://」から始まるHTTPプロトコル形式のURLの場合は,HttpURLConnectionクラスのインスタンスが返されます.もし,HttpURLConnectionのメソッドを利用したい場合は,次のようにキャスト(型変換)してください.
HttpURLConnection httpUrlConnection = (HttpURLConnection)(url.openConnection());
openConnectionは,実際には接続管理オブジェクトが生成されるだけで,まだ,サーバへの接続が開始されてはいません.
次に,各種パラメータや,サーバへの通信時のリクエスト・ヘッダなどを設定します.そして,connectメソッドにより,実際のサーバへの接続が確立されます.connectメソッドを直接使うことはなく,実際には,getOutputStreamメソッドによりサーバへの送信を行うためのストリームを生成した際,もしくはgetInputStreamメソッドによりサーバからの応答を受信するためのストリームを生成した際に,内部的にconnectメソッドが呼び出されて,サーバとの接続が行われます.
サーバとの接続を切断する明示的なメソッドは用意されていません.getInputStreamメソッドにより取得したInputStreamオブジェクトのcloseメソッドを呼び出すことで,切断されます(表B).
表B getInputStreamメソッドの説明
形式 | getInputStream public InputStream getInputStream() throws IOException |
処理内容 | この接続からの入力を受け取る入力ストリームを返す.返された入力ストリームからの読み取り時に,データが読み取り可能になる前に読み取りタイムアウトが過ぎた場合,SocketTimeoutExceptionがスローされる |
引き数 | なし |
戻り値 | この接続からの入力を受け取る入力ストリーム |
やまだ・もとやす
スパイシーソフト(株) 代表取締役