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

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

HTTPでバイナリデータをダウンロード

DownLoading Binary Data Using HTTP

HTTP GETを使ってサーバに接続する
HTTP POSTを使ってサーバに接続するの2つで
HTTPのメソッドを使ってウェブサーバに接続する方法を
示しました。
この2つの例はウェブサーバからテキストコンテンツを
どのようにダウンロードするかを示したものでもあります。
ここでは、バイナリコンテンツをどのようにダウンロードするかを
示し、特に、サーバから画像をダウンロードする方法と、
ImageViewの中にダウンロードした画像を表示する方法を示します。
まず、アクティビティに画像を表示するために、
ユーザインターフェースにあるImageView要素がactivity_main.xmlに
必要になります。

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  xmlns:tools="http://schemas.android.com/tools"
  android:layout_width="match_parent"
  android:layout_height="match_parent" >

  <ImageView
   android:id="@+id/img"
   android:layout_width="wrap_content"
   android:layout_height="wrap_content"
   android:layout_gravity="center" />
</RelativeLayout>

ウェブサービスから画像をダウンロードするためには、
HTTP GETを使ってサーバに接続するで示した
OpenHttpGETConnection()メソッドを使うことができます。
画像をダウンロードするためには、
以下のようなメソッドを定義し、そのメソッドでサーバに接続し、
BitmapFactoryクラスのDecodeStream()メソッドを使って
InputStreamオブジェクトにあるデータを複合します。

private Bitmap DownloadImage(Sting URL){
  Bitmap bitmap = null;
  InputStream in = null;
  try{
   in = OpenHttpGETConnection(URL);
   bitmap = BitmapFactory.decodeStream(in);
   in.close();
  }catch (Exception e){
   Log.d("DownloadImage", e.getLocalizedMessage());
  }
}

HTTP POSTを使ってサーバに接続するなどにあるように
AsyncTaskクラスのサブクラス内部にあるDownloadImage()メソッドを
呼び出す必要があります。以下の様にクラスを定義します。

private class DownloadImageTask extends AsyncTask<String, Void, Bitmap>{
  protected Bitmap doInBackground(String... urls){
   return DownloadImage(urls[0]);
  }

  protected void onPostExecute(Bitmap result){
   ImageView img = (ImageView) findViewById(R.id.img);
   img.setImageBitmap(result);
  }
}

ちょっと注釈

AndroidManifest.xmlファイルにINTERNETパーミッションを
追加することを忘れずに。

ホーム
便利堂ロゴ
inserted by FC2 system