티스토리 뷰

1. 안드로이드 코틀린으로 이미지 url 에서 이미지뷰에 띄우기

코루틴을 사용해서 이미지 url 을 통해 인터넷 스트림을 열어서 Bitmap 으로 가져와 ImageView에 띄워주는 코드를 작성해봅시다.

코루틴을 몰랐을 때에는 쓰레드 오류, 여러 예외들이 터지면서 이미지 로드가 제대로 안되었고, 구글링 하여 찾는 코드는 asyncTask 를 사용하는 (레거시)코드 였는데 이미지는 불러와졌는데 그래도 시원하게 뻥 뚤리는 느낌이 아니었는데 답은 코루틴에 있었습니다.

이번에 프로그래머스에서 진행하는 데브 매칭 앱 개발자 과제 또한 이미지를 불러오는 부분이 있었는데 이부분이 코루틴을 사용할 수 있냐를 넌지시 제시해 놓은 것을 이제서야 깨닫고는 왜 내가 코루틴을 공부하지 않고 테스트를 봤는지 후회가 되더라고요. 지금이라도 공부하게되어 다행이지만 아쉽기는 매한가지입니다. (데브매칭 하반기 노려봅니다)

1.1. image url string to bitmap

이미지 url 을 전달하면 비트맵으로 반환해주는 suspend 함수를 하나 작성합니다. try 문 내부에 있는 3줄 코드가 이미지를 받아오는 코드 입니다.

object ImageLoader{

    suspend fun loadImage(imageUrl: String): Bitmap? {
        val bmp: Bitmap? = null
        try {

            val url = URL(imageUrl)
            val stream = url.openStream()

            return BitmapFactory.decodeStream(stream)

        } catch (e: MalformedURLException) {
            e.printStackTrace()
        } catch (e: IOException) {
            e.printStackTrace()
        }
        return bmp
    }

}

그리고 바인딩 처리를 해주는 부분에 아래와 같이 코루틴 스코프를 사용해서 런치해주면 정상적으로 이미지가 로딩되는 것을 확인할 수 있습니다.

            CoroutineScope(Dispatchers.Main).launch {
                val bitmap = withContext(Dispatchers.IO){
                    ImageLoader.loadImage(lecture.courseImage)
                }
                binding.lectureImage.setImageBitmap(bitmap)
            }
                CoroutineScope(Dispatchers.Main).launch {
                    val bitmap = withContext(Dispatchers.IO) {
                        ImageLoader.loadImage(it.courseImageLarge)
                    }
                    binding.lectureImage.setImageBitmap(bitmap)
                }

추가로 asyncTask<> 를 사용하는 레거시 코드 또한 참고로 작성해두려 했으나 깃헙에 커밋만 해두고 굳이 구버전 기술을 여기에는 작성하지 않도록 하겠습니다. 향후 코루틴 버전업이 되거나 새로운 기술이 나오면 내용 추가하도록 하겠습니다.

2021.06.22 - [Android/Kotlin] - [Android] 코틀린(Kotlin) 코루틴(Coroutine) 한 번에 끝내기

2021.06.21 - [Android] - [Android] webView 에 html String Data 넣어서 불러오기

2021.06.18 - [Android] - [Android] 코드에서 drawable 자원으로 컴포넌트 속성 설정하기

댓글
최근에 올라온 글
최근에 달린 댓글
네이버 이웃추가
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
글 보관함