ウェブアプリケーション,インジェクション,コマンドインジェクション

Androidアプリ開発 ネットワークプログラミング

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" />
ホーム
便利堂ロゴ
inserted by FC2 system