オープンアプリ・ゲームコンテスト
コンテスト概要 応募方法 応募作で遊ぼう アプリ開発講座 Special Special

アプリ開発講座

講座スケジュール
第1回 オープンアプリ(Java)とJava実行環境
line
第2回 はじめてのオープンアプリ(Java)の作成
line
第3回 イメージの描画
line
第4回 キー入力の処理
line
第5回 オープンアプリ(Java)への移植
line
第6回 ゲームの作成
line第7回 端末へのデータ保存
line第8回 サウンドの再生
line第9回 バイブレーションとブラウザ起動
line最終回 HTTPによる通信
line

開発講座TOPへ



講師プロフィール
株式会社ユビキタスエンターテインメント 布留川英一

1999年のJavaMEの仕様公開を期に「JAVA PRESS(技術評論社)」にてライターとしての活動をはじめ、2000年の503iシリーズの発売を期にドワンゴへ移り、携帯アプリの研究開発を行う。2005年に独立し、ユビキタスエンターテインメントにて次世代コンテンツを作成中。
【著書】
MIDP 2.0 携帯Javaアプリ開発ハンドブック
iアプリゲーム開発テキストブック
ActionScript 3.0 ゲームプログラミングブック
他6冊

 

 

最終回 
HTTPによる通信


最終回の今回は、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」クラスを使い、

  1. ネットとの接続す
  2. データの書き込み・読み込み
  3. ネットとの切断

の順に処理します。

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()メソッドを使います。タイムアウトで指定した時間が経過するか、終了キーを押すとダイアログが閉じて、元のキャンバスに戻ります。

おわりに

今回でこの連載もおしまいです。より面白いゲームや便利なツールを作るための手助けにしてもらえれば幸いです。



ページ先頭へ


  Copyright(C) Spicysoft Corporation All rights reserved.
 
アプリゲット