반응형
안드로이드(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 |