반응형
|
안드로이드(Android) 웹페이지에서 이미지 다운로드 구현 |
|
환경 : Eclipse Mars, Android 4.2.2 |
이번 예제는 웹페이지에서 이미지를 다운로드해서 화면에 보여주는 내용입니다. 이미지의 용량이 클 수 있으므로 다운로드를 위해 AsyncTask 클래스를 상속받아 만들었습니다. 비동기로 백그라운드에서 다 받을 때 까지 돌아가는 것이죠.
▼ 먼저 이미지 다운로드를 위해 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);
}
}
}
반응형
'안드로이드 개발' 카테고리의 다른 글
| 안드로이드(Android) EditText 위젯의 입력타입별 예제 (0) | 2015.01.11 |
|---|---|
| 안드로이드(Android) raw 폴더에 있는 Text 파일 읽어 오기 (1) | 2015.01.08 |
| 안드로이드(Android) Chronometer 사용하여 시간측정을 위한 타이머 만들기 (1) | 2015.01.05 |
| 안드로이드(Android) Chronometer, OnChronometerTickListener 통해 시간알아오기 (2) | 2015.01.04 |
| 안드로이드(Android) ListActivity 를 이용해여 간단한 목록형 화면만들기 (0) | 2014.12.28 |
| 안드로이드(Android) 백그라운드 스레드 소스 Runnable 이용해 구현 (0) | 2014.12.26 |
| 안드로이드(Android) 백그라운드에서 Handler 를 통해 UI 변경 (1) | 2014.12.23 |
| 안드로이드(Android) This Handler class should be static or leaks might occur 해결 (6) | 2014.12.21 |
