안드로이드(Android) 웹페이지에서 이미지 다운로드 구현

안드로이드 개발

안드로이드(Android) 웹페이지에서 이미지 다운로드 구현

 

환경 : Eclipse Mars, Android 4.2.2

 

이번 예제는 웹페이지에서 이미지를 다운로드해서 화면에 보여주는 내용입니다. 이미지의 용량이 클 수 있으므로 다운로드를 위해 AsyncTask 클래스를 상속받아 만들었습니다. 비동기로 백그라운드에서 다 받을 때 까지 돌아가는 것이죠.

 

 

안드로이드(Android) 웹페이지에서 이미지 다운로드 구현

 

먼저 이미지 다운로드를 위해 AndroidManifest.xml 퍼미션을 추가합니다

 

<uses-permission android:name="android.permission.INTERNET" />

 

다음은 다운로드를 진행할 클래스를 만듭니다. AsyncTask 를 상속받아서 만들어야 합니다. 이것도 스레드의 일종이며 화면락 없이 진행할려면 AsyncTask 만듭니다. AsyncTask doInBackground() 함수에서 URL 인수로 받아 사이트에 접속한후 InputStream 저장합니다. 그리고 Bitmap 으로 디코딩해서 변환합니다.

 

@Override
protected Bitmap doInBackground(Object... params) {
	Bitmap mBitmap = null;
	bmImage = (ImageView)params[0];
	String url = (String)params[1];
	InputStream in = null;
	try {
		in = new java.net.URL(url).openStream();
		mBitmap = BitmapFactory.decodeStream(in);
		in.close();
		
	} catch (Exception ex) {
		ex.printStackTrace();
	}
	return mBitmap;
}

 

완료가 되면 onPostExecute() 함수에서 ImageView 위젯에 비트맵 이미지 값을 셋팅하면 됩니다. AsyncTask 내부에서 ImageView 를 셋팅할수 있는 것은 인수로 mageView넘겼기 때문입니다.


@Override
protected void onPostExecute(Bitmap bm) {
	super.onPostExecute(bm);
	bmImage.setImageBitmap(bm);
}

 

이렇게 해서 구현한 메인 activity 의 전체 소스입니다.


import java.io.InputStream;
import android.app.Activity;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.os.Bundle;
import android.widget.ImageView;

public class WebImageDownActivity extends Activity {

	String imageUrl = "https://t1.daumcdn.net/cfile/tistory/21097435544EC2FB1B";

	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_web_image_down);

		ImageView bmImage = (ImageView) findViewById(R.id.image);
		BitmapFactory.Options bmOptions;
		bmOptions = new BitmapFactory.Options();
	    bmOptions.inSampleSize = 1;
	    
	    OpenHttpConnection opHttpCon = new OpenHttpConnection();
	    opHttpCon.execute(bmImage, imageUrl);
	}

	private class OpenHttpConnection extends AsyncTask<Object, Void, Bitmap> {
		
		private ImageView bmImage ; 
	
		@Override
		protected Bitmap doInBackground(Object... params) {
			Bitmap mBitmap = null;
			bmImage = (ImageView)params[0];
			String url = (String)params[1];
			InputStream in = null;
			try {
				in = new java.net.URL(url).openStream();
				mBitmap = BitmapFactory.decodeStream(in);
				in.close();
				
			} catch (Exception ex) {
				ex.printStackTrace();
			}
			return mBitmap;
		}

		@Override
		protected void onPostExecute(Bitmap bm) {
			super.onPostExecute(bm);
			bmImage.setImageBitmap(bm);
		}
	}
}
Posted by 녹두장군