HTTP GETを使ってサーバに接続
Connecting to Servers Using HTTP GET
開発するアプリケーションが外界と話すためのとても一般的な
方法の1つは、やはりウェブサーバに接続することでしょう。
ウェブサーバは国境のないHTTP(Hyper Text Transfer Protocol)を
使ってウェブクライアント(ウェブを使う側)とやり取りをします。
HTTPの2つの優位性は、軽量で、広い範囲に展開していることです。
ここでは、AndroidアプリケーションをHTTPを使って
ウェブサーバに接続し、ウェブサーバから直接データを
ダウンロードする方法を紹介します。
HTTPを使ってサーバに接続するには、GETとPOSTの2つのメソッドを
使うことができます。
GETを使って、URLに付属させる形でサーバに渡したいデータを
送ります。(検索をかけるのがこれになります。)
以下にあるOpenHttpGetConnection()メソッドは、HttpClientと
HttpResponseクラスを使ってどのようにサーバとの接続を
開けるかを示します。
//---Connects using HTTP GET---
public static InputStream OpenHttpGETConnection(String url){
InputStream inputStream = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpResponse httpResponse = httpclient.execute(new HttpGer(url));
inputStream = httpResponse.getEntity().getContent();
}catch (Exception e){
Log.d("InputStream", e.getLocalizedMessage());
}
return inputStream;
}
ウェブサーバとの接続が確立したときには、HttpResponseオブジェクトは、
InputStreamオブジェクトを返します。
InputStreamオブジェクトを使うことで、サーバから送られてくる
データを直接読むことができます。
例えば、ウェブサービスの通貨コンバータが
http://www.webservicex.net/CurrencyConvertor.asmxにあると
考えます。
ConversionRateウェブメソッドはHTTP GETを使ってコンバータと
やり取りすることをサポートします。ウェブサービスを呼び出すためには、
以下のようなメソッドを作ることができます。
以下のコードはOpenHttpGETConnection()メソッドを呼び出し、
InputStreamオブジェクトを使い、このオブジェクトによって
ウェブサービスからのダウンロードの結果に返されます。
prrivate String DownloadText(String URL){
int BUFFER_SIZE = 2000;
InputStream in = null;
try{
in = OpenHttpGETConnection(URL);
}catch(Exception e){
Log.d("DownloadText", e.getLocalizedMessage());
return "";
}
InputStreamReader isr = new InputStreamReader(in);
int charRead;
String str = "";
char[] inputBuffer = new char[BUFFER_SIZE];
try{
while((charRead = isr.read(inputBuffer)) > 0){
//---convert the chars to a String---
String readString = String.copuValueOf(inputBuffer, 0, charRead);
str += readString;
inputBuffer = new char[BUFFER_SIZE];
}
in.close();
} catch (IOException e) {
Log.d("DownloadText", e.getLocalizeMessage());
return "";
}
return str;
}
ここで、InputStreamReaderクラスをInputStreamオブジェクトを
経由してウェブサービスからの結果を(XML文字列)をダウンロード
するために使います。
残念ながら、アクティビティのなかでDownloadText()メソッドを
直接呼び出すことはできません。
Android3.0で始まったものですが、ネットワーク操作は
開発するAndroidアプリケーションのユーザインターフェーススレッドから
直接行われるものではありません。
DownloadText()メソッドを呼び出すためには、
AsyncTaskクラスのサブクラスを使った呼び出しを包む必要があります。
private class DownloadTextTask extends AsyncTask<String, Void, String>{
pritected String doInBackground(String... urls){
return DownloadText(urls[0]);
}
@Override
protected void onPostExecute(String result){
Toast.makeText(getBaseContext(), result, Toast.LENGTH_LONG).show();
Log.d("DownloadTextTask", result);
}
}
上のコードで紹介したクラス、DownloadTextTaskは
非同期的にDownloadText()メソッドを呼び出します。
これでネットワークアクティビティのために
ユーザインターフェーススレッドがフリーズしないようにできます。
DownloadTextTaskクラスを使ってウェブサービスを呼び出すためには、
以下のようなステートメントを使います。
new DownloadTextTask()
.execute("http://www.webservicex.net/CurrencyConvertor.asmx/ConversionRate?
FromCurrency=EUR&ToCurrency=USD");
URLがウェブサービスに渡すために必要になる情報を含むことに注目します。
ここでは、ユーロ(EUR)とU.S.ドルの変換レートを検索してます。
サーバに接続するためには、AndroidManifest.xmlファイルに
INTERNETパーミッションを加えておく必要があります。
<uses-permission android:name="android.permission.INTERNET" />
|
【用語解説】
XML
HTMLと同じような言語ですが、
すべての型の複雑なデータ構造を
送信するための設計ができる
ファイル型式。
オブジェクト
ある手続きを持った
データアイテムで、
他の手続きと関連づけされるもの
metaタグ
ウェブページに与える
情報の宣言につかわれ
検索エンジン・ウェブアプリ
などにウェブページの内容を
伝える役目をする。
metaタグの内容は
ページ内に表示されない。
コンストラクタ
オブジェクト指向
プログラミングで使われ
新しいオブジェクトが
作られ時に呼び出される
メソッドのこと。
クラス
オブジェクト指向
プログラミングでの
オブジェクトの型
オブジェクト指向プログラミング
プログラミングの
方式のことで、
プログラマはデータ型を
定義できるだけでなく
自動的にデータ型と
メソッドを関連付け
できる
アクティビティ
Androidにおける
アクティビティは
Androidアプリの画面に
相当するもの
ボタンやウェブページ
など表示されている
すべてのもののこと。
view
Androidのアプリを開発する
上で使う部品のことで、
トリガボタン・イメージボタン
チェックボックスなどのこと。
UI
ユーザインターフェースのこと。
Bind(バインド)
シンボルとデータを
関連させるため
または、データの一片と
他のものを関連させること。
以下は例。
・変数に値を入れる。
(変数の初期化)
・特定のEthernetポートと
ネットワークプロトコルを
関連付けする。
・Javaの変数のセット上に
XML文書を配置すること。
または、ほかの
プログラミング言語でも。
|