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

山田 元康

tag: 組み込み

エレキ系DIY 2012年5月10日

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がスローされる
引き数なし
戻り値この接続からの入力を受け取る入力ストリーム

 

 

やまだ・もとやす
スパイシーソフト(株) 代表取締役

 

 

組み込みキャッチアップ

お知らせ 一覧を見る

電子書籍の最新刊! 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日