最終回の今回は、HTTPによる通信について解説します。弾幕避けゲームのソフトキー2にスコアアップロードの機能を追加します。
[サンプルプログラムのダウンロード]

プログラムは、次の2つのクラスで構成されています。
- DanmakuGameクラス(DanmakuGameEx.java)
- DanmakuCanvasクラス(DanmakuCanvas.java)
プロジェクト名「DanmakuGame5」とクラス名「DanmakuGame」でプロジェクトを作成してください。
▼HTTPとHTTPS
オープンアプリ(Java)で利用できる通信プロトコルは「HTTP」と「HTTPS」(HTTPにデータ暗号化機能を付けたもの)です。「HTTP」は、「http://」で始まるURLのリソースにアクセスするためのプロトコルです。HTTP通信で行う操作には「GET」と「POST」があります。
| GET |
テキストや画像をダウンロード |
| POST |
サーバに情報をアップロード |
オープンアプリ(Java)のデータ長の制限はGETもPOSTも同一で、送信5KB、受信32KBです。それに加え、全てのオープンアプリ(Java)での1日の通信量は最大3MBまでという制限もあります。また、通信毎に確認ダイアログが表示されてしまいます。そのため、定期的に通信を行うようなアプリの作成にはむきません。

▼GETパラメータ
「HTTP」の「GET」では、URLの後ろに「パラメータ」を付加することで、サーバに情報を送信することもできます。パラメータの書式は「?キー=値」です。
キーが「highscore」で値が「10000」のパラメータを渡す時のURLは、次の通りです。
| http://npaka.net/midp2/server.jsp?highscore=10000 |
今回は、ハイスコアアップロードに成功した時に戻り値として"OK"という文字列を戻すようにします。サーバー側の作成方法については記事の範囲外なので省略します。動作テストには"OK"という文字列を記述したテキストファイルで代用しています。
▼HTTPによる通信
HTTPによる通信を行うには「javax.microedition.io.Connector」クラスを使い、
- ネットとの接続す
- データの書き込み・読み込み
- ネットとの切断
の順に処理します。
DanmakuCanvasクラスに追加したHTTPによる通信部分は次の通りです。
DanmakuCanvas.javaの一部
//HTTPによるバイトデータの読み込み【追加】
private byte[] readByte(String url) throws Exception {
byte[] w=new byte[10240];
int rc,size;
HttpConnection c =null;
InputStream in =null;
ByteArrayOutputStream out=null;
try {
//ネットと接続する
c =(HttpConnection)Connector.open(url);
in =c.openInputStream();
out=new ByteArrayOutputStream();
//レスポンスコードのチェック
rc=c.getResponseCode();
if (rc!=HttpConnection.HTTP_OK) {
throw new Exception();
}
//データを読み込む
while (true) {
size=in.read(w);
if (size<=0) break;
out.write(w,0,size);
}
//ネットと切断する
in.close();
c.close();
out.close();
return out.toByteArray();
} catch (Exception e) {
//例外処理
try {
if (in !=null) in.close();
if (c !=null) c.close();
if (out!=null) out.close();
} catch (Exception e2) {
}
throw e;
}
}
|
ネットとの接続を行うには、open()メソッドを使います。
| [Connectorクラス] |
static Connection open(url)
url 接続先URL:String型
戻り値 Connectorクラスのオブジェクト:Connector型 |
| ネットとの接続を行う。 |
urlには接続先URLを指定します。
戻り値のConnectorクラスのオブジェクトをHttpConnectionクラスにキャストします。入力ストリームを取得するには、HttpConnectionクラスのopenInputStream()メソッドを使います。
| [HttpConnectionクラス] |
InputStream openInputStream()
戻り値 入力ストリーム:InputStream型 |
| 入力ストリームを取得する。 |
接続が成功したかどうかは、getResponseCode()メソッドの戻り値がHttpConnection.HTTP_OKかどうかで調べます。
| [HttpConnectionクラス] |
int getResponseCode()
戻り値 HTTPレスポンスコード:int型 |
| HTTPレスポンスコードを取得する。 |
主なレスポンスコードは次の2つです。
| 200 |
HttpConnection.HTTP_OK |
リクエスト成功 |
| 404 |
HttpConnection.HTTP_NOT_FOUND |
ファイルを見つけらない |
データを読み込むには、InputStreamクラスのread()メソッドを使います。バッファサイズが長くても、1回で全て読み込めるとは限らないので注意してください。戻り値が0以下になっら終端と判断します。
ネットと切断するには、InputStreamクラスとHttpConnectionクラスのclose()メソッドを使います。
| [HttpConnectionクラス] |
| void close(); |
| ネットと切断する。 |
例外が発生した時も、切断するのを忘れないでください。アプリが終了するまで、ネットに接続できなくなります。
▼アラート
アラートとは、エラーメッセージや操作確認の表示を行うウィンドウのことです。MIDPで使用できるアラートは情報を表示のみで、「はい/いいえ」を選択といったことはできません。

アラートを使うには、まずAlertオブジェクトを作ります。
| [Alertクラス] |
Alert(title,alertText,alertImage,alertType)
title タイトル:String
alertText テキスト:String
alertImage イメージ:Image
alertType 種別:AlertType |
| Alertクラスのコンストラクタ。 |
タイトルにはアラートのタイトルバーに表示する文字列を指定します。テキストにはアラートの枠内に表示する文字列を指定します。イメージにはアラートに追加するイメージを指定します。必要ない時はnullを指定します。種別には種別定数を指定します。
| AlertType.ALARM |
警報 |
| AlertType.CONFIRMATION |
承認 |
| AlertType.ERROR |
エラー |
| AlertType.INFO |
情報 |
| AlertType.WARNING |
警告 |
ダイアログを何秒間表示するかを指定するにはsetTimeout()メソッドを使います。そして、終了キーを押すまで表示し続けるには、「Alert.FOREVER」を指定します。
| [Alertクラス] |
void setTimeout(timeout)
timeout タイムアウト:int |
| タイムアウト時間を指定する。 |
ダイアログを画面に表示するには、DisplayクラスのsetCurrent()メソッドを使います。タイムアウトで指定した時間が経過するか、終了キーを押すとダイアログが閉じて、元のキャンバスに戻ります。
▼おわりに
今回でこの連載もおしまいです。より面白いゲームや便利なツールを作るための手助けにしてもらえれば幸いです。
|