본문 바로가기
안드로이드 자바

[JAVA][Android] URL과 DECODE 활용하기

by teamnova 2022. 2. 18.

안녕하세요 오늘은 URLDECODE에 대해서 알아보겟습니다.

 

[참고 자료] 아래 스틱코드 링크를 참고하세요

https://stickode.com/detail.html?no=2399 

 

https://stickode.com/detail.html?no=2399

 

stickode.com

 

1. URL

 

URLUniform Resource Locator의 약자인데 쉽게 말하면 자원의 위치를 뜻합니다.

 

예를 들어 “103호 에서 물병을 가져와라는 명령이 있다면 물병의 위치가 103호에 있다는 것을 먼저 알아야 하듯이

 

인터넷상에 있는 어떤 이미지를 가져오고 싶을 때 그 이미지가 있는 위치를 알아야 겠죠?

 

그 위치값을 url로 표현하는 것입니다.

 

URL url = new URL(img_url);

 

2. BitmapFactory

그런데 이미지를 가져온 후에 사용하는 BitmapFactory는 무엇일까요?

 

BitmapFactory 클래스의 정의는 다음과 같습니다.

 

Creates Bitmap objects from various sources, including files, streams, and byte-arrays.

 

어떤 자원을 비트맵으로 만들어주는 공장인 것이죠.

 

BitmapFactory 의 여러 옵션 중에서 decodeStream 이 있습니다.

bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());

 

3. DECODE

decode는 코드를 원래 상태로 되돌리는 것입니다. 다시 말해서 코드화 된 어떤 정보를 다시 되돌리는 것인데 이전에 코드화 시킨 것을 encoding 했다고 말합니다.

접두사 de-의 뜻이 not 인 것을 알면 더 잘 이해가 되시겠죠?

 

그렇다면 Stream은 무엇일까요?

Stream은 여러 데이터 조각들이 물 흐르듯 모여 있는 것으로 생각하면 좋을 것 같습니다.

 


public class MainActivity extends AppCompatActivity {

    ImageView iv_image;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        iv_image = findViewById(R.id.imageView1);

        new DownloadFilesTask().execute("https://www.shutterstock.com/ko/blog/wp-content/uploads/sites/17/2017/12/shutterstock_116222914.jpg?w=760&h=492");
    }

    private class DownloadFilesTask extends AsyncTask<String,Void, Bitmap> {
        @Override
        protected Bitmap doInBackground(String... strings) {
            Bitmap bmp = null;
            try {
                String img_url = strings[0]; //url of the image
                URL url = new URL(img_url);
                bmp = BitmapFactory.decodeStream(url.openConnection().getInputStream());
            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return bmp;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }


        @Override
        protected void onPostExecute(Bitmap result) {
            // doInBackground 에서 받아온 total 값 사용 장소
            iv_image.setImageBitmap(result);
        }
    }
}

 

정리하자면

 

안드로이드에서 웹상의 이미지를 가져올 수 있었던 원리는

 

특정 URL에 위치한 어떤 이미지가 여러 데이터 조각들로 이루어져 있는데

 

그것을 비트맵으로 디코딩하였고

 

그 결과값을 setImageBitmap 함수에 넣어서 화면에 나타나게 해 줄 수 있는 것입니다.