随分と古いガラ携を使い続けていたのですが、昨年(2011年)やっとAndroid携帯に買い換えました(キャリアが違うのでiPhoneには出来ませんでしたが)。ここ1年程使ってみて特に不満もなく現在に至っています。遅ればせながらAndroidのプログラムでも作ってみようかと環境を整えてみました。携帯は国産品で2.2系、製造元より公開されているWindows用のUSBドライバとEclipse+Android SDKで何とかHello Worldが出来るようになりました。AndroidからWebアプリケーションにアクセスする簡単なアプリを作っていこうと思います。
※この記事は、最近、物忘れが激しいので自習の備忘録として記録しているものであり、内容について一切の保証をするものではありません。
Android側はWindows7(64bit)マシン上に携帯の専用USBドライバをインストールし、Eclipse+Android SDK及び各種pluginを入れた開発環境を使用しています。サーバ(Webアプリケーション)側は以前Struts2をやった時の環境を流用しています。CentOS 5.7+Eclipseです。
下図のような画面を主ViewとしたActivity("MainActivity")にて、入力された品番をサーバに問い合わせて結果を表示するというアプリを最終目標にします:
まずは問い合わせに必要なHTTP通信について簡単な実験から。ここを参考にさせて頂いてHTTP通信の基礎を実装(ってか丸写しなんですけど)。ボタンがクリックされたら予めプログラムにハードコーディングされているWebサイトにHTTP GETを実行し、取得した結果をそのまま表示してみます:
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); // Button Click Listenerの設定 Button btn = (Button) this.findViewById(R.id.btnSearch); btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View view) { String result = ""; try { result = getContents(); } catch (Exception ex) { AlertDialog.Builder dlg; dlg = new AlertDialog.Builder(MainActivity.this); dlg.setTitle("Error"); dlg.setMessage(ex.getLocalizedMessage()); dlg.show(); } EditText edit = (EditText) findViewById(R.id.txtResult); edit.setText(result); } }); }
private void getContents() { // 実験用に適当なurlを指定してGETリクエスト用のオブジェクトを生成する HttpGet request = new HttpGet("http://www.somewhere.com/"); DefaultHttpClient client = new DefaultHttpClient(); try { // Handlerを使って実行 String result = client.execute(request, new ResponseHandler<String>() { @Override public String handleResponse(HttpResponse response) throws ClientProtocolException, IOException { // 実行結果の確認 switch (response.getStatusLine().getStatusCode()) { case HttpStatus.SC_OK: // Response内容を取得して表示 String msg = EntityUtils.toString(response.getEntity(), "UTF-8"); return msg; case HttpStatus.SC_NOT_FOUND: throw new RuntimeException("Error: Not Found"); default: throw new RuntimeException("Error: something"); } } }); } catch (ClientProtocolException e) { throw new RuntimeException(e); } catch (IOException e) {getContents throw new RuntimeException(e); } finally { client.getConnectionManager().shutdown(); } }
実行するとアクセス先からプレーンなHTMLが取得されました。
まずは簡単なHTTP通信から初めて、これをベースに肉付けして行こうかと思います。