HTTP POSTを使ってサーバに接続
Connecting to Servers Using HTTP POST
HTTP GETを使ってサーバに接続で
HTTP GETを使ってサーバに接続する方法を示しました。
それによりURLの最後に付け加えられたデータがサーバに
渡されます。
HTTP GETを使う代わりに、HTTP POSTメソッドを使うこともできます。
HTTP GETと共に、URLに含まれているすべてのデータが
サーバに渡され、データ量は大抵2000文字以下に制限されています。
HTTP POSTでデータをサーバに別々に送ることができ、
基本的にはデータサイズ制限を回避しています。
ここでは、HTTP POSTを使ってウェブサーバに接続する方法を示します。
HTTP POSTを使ってサーバに接続するには、
HttpClient、HttpPost、HttpResponseクラスを使います。
//---Connects using HTTP POST---
public InputStream OpenHttpPOSTConnection(String url){
InputStream inputStream = null;
try{
HttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
//---set the headers---
httpPost.addHeader("Host", "www.webservicex.net");
httpPost.addHeader("Content-Type, "application/x-www-form-urlencoded");
//---the key/value pairs to post to the server---
List<NameValuePair>nameValuePairs = new ArrayList<NameValuePair>(2);
nameValuePairs.add(new BasicNameValuePair("FromCurrency", "USD"));
nameVluePairs.add(new BasicNameValuePair("ToCurrency#, "SGD"));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
HttpResponse httpResponse = httpclient.execute(httpPost);
inputStream = httpResponse.getEntity().getContent();
} catch (Exception e){
Log.d("OpenHttpPOSTConnection", e.getLocalizedMessage());
}
return inputStream;
}
HTTP GETでサーバに接続するのように
為替換算ウェブサービスにHTTP POSTを使って接続します。
OpenHttpPOSTConnection()メソッドでは、
サーバに送信する必要のあるヘッダを加えるためにHttpPostクラスを
使うように仕向けます。
特に、HOSTとContent-Typeヘッダのセットが必要になります。
HttpPostオブジェクトのsetEntity()メソッドを使って
為替情報を送信する必要もあります。
ここでは、FromCurrencyとToCurrencyという2つのデータが
NameValuePairオブジェクトのリストとして渡されています。
HTTP GETでサーバに接続するのように
DownloadText()メソッドにあるOpenHttpPOSTConnection()を呼び出し、
結果、返って来た結果をダウンロードできます。
private String DownloadText(String URL){
int BUFFER_SIZE = 2000;
InputStream in = null;
try{
in = OpenHttpPOSTConnection(URL);
}catch (Exception e){
Log.d("Networking", e.getlocalizedMessage());
return "";
}
InputStreamReader isr = new InputStreamReader(in);
int charRead;
String str = "";
char[] inputBuffer = new char[BUFFER_SIZE];
try{
while((charTead = isr.read(inputBuffer)) > 0){
//---convert the chars to a String---
String readString = String.copyValueOf(inputBuffer, 0, charRead);
str += readString;
inputBuffer = new char[BUFFER_SIZE];
}
in.close();
}catch(IOException e){
Log.d("DownloadText", e.getLocalizedMessage());
return "";
}
return str;
}
分離したスレッドにあるDownloadText()メソッドを呼び出す
必要もあり、AdyncTaskクラスのサブクラスを使って、
DownloadText()メソッドを囲みます。
private class DownloadTextTask extends AsyncTask<String, Void, String>{
protected 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クラスを
使いウェブサービスを呼び出します。
//---Using HTTP POST---
new DownloadTextTask().excute("http://www.webservicex.net/CurrencyConvertor.asmx/
ConversionRate");
ちょっと注釈
AndroidManifest.xmlファイルにINTERNETパーミッションを
加えておくことを忘れずに。
|
【用語解説】
XML
HTMLと同じような言語ですが、
すべての型の複雑なデータ構造を
送信するための設計ができる
ファイル型式。
オブジェクト
ある手続きを持った
データアイテムで、
他の手続きと関連づけされるもの
metaタグ
ウェブページに与える
情報の宣言につかわれ
検索エンジン・ウェブアプリ
などにウェブページの内容を
伝える役目をする。
metaタグの内容は
ページ内に表示されない。
コンストラクタ
オブジェクト指向
プログラミングで使われ
新しいオブジェクトが
作られ時に呼び出される
メソッドのこと。
クラス
オブジェクト指向
プログラミングでの
オブジェクトの型
オブジェクト指向プログラミング
プログラミングの
方式のことで、
プログラマはデータ型を
定義できるだけでなく
自動的にデータ型と
メソッドを関連付け
できる
アクティビティ
Androidにおける
アクティビティは
Androidアプリの画面に
相当するもの
ボタンやウェブページ
など表示されている
すべてのもののこと。
view
Androidのアプリを開発する
上で使う部品のことで、
トリガボタン・イメージボタン
チェックボックスなどのこと。
UI
ユーザインターフェースのこと。
Bind(バインド)
シンボルとデータを
関連させるため
または、データの一片と
他のものを関連させること。
以下は例。
・変数に値を入れる。
(変数の初期化)
・特定のEthernetポートと
ネットワークプロトコルを
関連付けする。
・Javaの変数のセット上に
XML文書を配置すること。
または、ほかの
プログラミング言語でも。
|