i アプリでHTTP通信を利用してWebサーバからデータを取得するアプリを作成してみましょう。なお今回のアプリでは開発環境に加えて、エミュレータを実行する環境からアクセス可能なWebサーバを用意する必要があります。
プロジェクトの作成
- iαppliToolを起動し、プロジェクトの新規作成をクリックします。
- プロジェクト名にhttpTestと入力し、「引き続きソースファイルを作成する」にチェックが入っていることを確認して「作成」をクリックします。
- 次の画面で、「テンプレートを利用する」の部分のチェックを外して「作成」をクリックします。
- 空のファイルhttpTest.javaが作成されれば完了です。
コードの記述
- httpTest.javaに、以下のコードを記述します。
- 入力が完了したらいったんビルドして、エラーが出ないことを確認してください。
import com.nttdocomo.ui.*;
import com.nttdocomo.io.*;
import javax.microedition.io.*;
import java.io.*;
public class httpTest extends IApplication {
public void start() {
/*
* The program of IApplication is written here.
*/
Display.setCurrent((Frame)new MainPanel());
}
}
class MainPanel extends Panel implements SoftKeyListener{
Label label;
MainPanel() {
setTitle("Start IApplication");
//文字列のラベルを作成し、パネルに追加
label = new Label();
add(label);
setSoftLabel(SOFT_KEY_1, "END");
setSoftLabel(SOFT_KEY_2, "LOAD");
setSoftKeyListener((SoftKeyListener)this);
}
public void softKeyPressed(int softKey) {
}
public void softKeyReleased(int softKey) {
if (softKey == SOFT_KEY_1) {
IApplication.getCurrentApp().terminate();
}
else if (softKey == SOFT_KEY_2) {
try{
HttpConnection connection =
(HttpConnection)Connector.open (
"http:/自分で用意したサーバー名/test.txt", Connector.READ);
//HTTPのコネクションを開く
//取得する対象のサーバ上のファイルを指定する
connection.setRequestMethod ( HttpConnection.GET );
// GETリクエストを指定
connection.connect();
//サーバへ接続
int contentLength = (int)connection.getLength();
//取得したデータの長さを取得
InputStream in = connection.openInputStream();
//取得したデータのストリームを取得
byte[] data = new byte[contentLength];
in.read(data);
//byte型の配列に取得したデータを読み込む
connection.close();
//HTTPのコネクションを閉じる
label.setText(new String(data,"SJIS"));
//取得したデータをSJISとして文字列に変換し、ラベルにセットする
}catch(Exception e){
System.out.println(e.toString());
}
}
}
}
エミュレータ動作環境の変更
メニューバーから設定→アプリケーション動作環境設定を開き、ネットワーク設定のタブを開きます。一番上のADFのURLの設定で、対象のファイルを設置するサーバを指定します。(例えばファイルがhttp://www.docomocup.com/test.txtならば、http://www.docomocup.com/を指定)サーバ上へのファイルの設置
コード上で指定したサーバへ任意のファイル(今回はtest.txt)を設置します。ファイル内の文字コードは今回はSJISとします。
左側のソフトキーを押すと、アプリケーションが終了します。
右側のソフトキーを押すと、Webサーバからファイルを読み込み、画面に表示します。
(今回はtest.txtに「テストデータです」と記述していたものとします)
右側のソフトキーを押すと、Webサーバからファイルを読み込み、画面に表示します。
(今回はtest.txtに「テストデータです」と記述していたものとします)
例外が発生した場合、コンソールに何らかのメッセージが表示されます。代表的なものと対処法を下に示します。
- java.lang.SecurityException: UseNetwork key not found in ADF
ADF設定で、useNetworkにチェックを入れてください。 - java.lang.SecurityException: Illegal host
アプリケーション動作環境設定で指定したADFのURLが、ソースファイルで指定しているURLのサーバを指しているかどうかを確認してください。 - com.nttdocomo.io.ConnectionException
サーバからデータ取得に失敗しました。404、403などのHTTPエラーが帰ってきた場合、この例外が発生します。サーバ上のこのファイルにアクセスできるかどうか、ブラウザ等を利用して確認してください。
今回はコードの解説をコメントで記述しました。通信の利用は比較的難しい分野となり、さまざまな原因で問題が発生します。実行時には、問題が特定できるように状況によってそれぞれ異なる例外が発生します。問題が発生した場合は、発生した例外の内容をコンソールに表示させ、Dojaリファレンス等を利用して状況を確認し、対処法を考えてみてください。
※「iモード」「FOMA」「iアプリ」及び「i-appli」ロゴはNTTドコモの登録商標です。
※「Google」「Android」および「Android ロゴ」「Androidマーケット」とそのロゴは、Google Incの商標または登録商標です。
※「Adobe」「Flash」および「Flash Lite」は、 Adobe Systems Incorporated (アドビ システムズ社)の米国ならびにその他の国における商標または登録商標です。


