POST

[안드로이드] 코틀린 AsyncTask 연습 - 이미지 다운로드

비동기 처리 AsyncTask 연습 인터넷 url의 이미지를 다운로드 받아보자

2022.01.27 - [Android] - [안드로이드] Kotlin 비동기 처리 AsyncTask

URL을 입력하여 다운로드 버튼을 누르면 이미지를 다운로드하는 앱 만들기

 

AsyncTask 생성

다운로드 버튼 클릭 이벤트를 작성 하고 내부에 AsyncTask를 생성합니다. 각인자의 타입은 아래처럼 작성합니다.

onProgressUpdate() 메서드는 여기서 사용하지 않을 예정이므로 입력받는 인자의 타입을 void로 지정합니다.

binding.btnDownload.setOnClickListener { // btnDownload 위젯 클릭시
    val asyncTask = object: AsyncTask<String, Void, Bitmap?>() { // AsyncTask 생성

doInBackground() 메서드

editUrl 위젯으로 입력받은 URL 주소를 받아옵니다.

전달받은 URL 주소로 URL 객체를 생성합니다.

생성된 URL과 연결된 stream을 반환 받습니다.

stream으로부터 bitmap 객체를 반환

override fun doInBackground(vararg params: String?): Bitmap? { // 백그라운드스레드 실행
    val urlString = params[0]!! // 입력받은 params의 값을 저장
    try {
        val url = URL(urlString) // url을 생성
        val stream = url.openStream() // url과 연결된 stream을 반환
        return BitmapFactory.decodeStream(stream) // url의 stream으로 부터 bitmap 객체를 반환
    } catch (e: Exception) {
        e.printStackTrace()
        return null
    }
}

onPostExecute() 메서드

전달 받은 bitmap객체가 null인지 확인

null이 아니라면 imageView 위젯의 image를 bitmap객체로 변경

override fun onPostExecute(result: Bitmap?) { // bitmap 객체를 전달 받음
    super.onPostExecute(result)

    if(result != null) { // bitmap 객체의 null 체크
        binding.imageView.setImageBitmap(result) // imageView의 이미지를 bitmap객체로 변경
    } else { // null일 경우 오류 표시
        Toast.makeText(this@MainActivity,"다운로드 오류",Toast.LENGTH_SHORT).show()
    }
}

onProgressUpdate() 메서드

여기서는 사용하지않아 제거해도 무방함

override fun onProgressUpdate(vararg values: Void?) { // 여기서는 사용되지 않음
    super.onProgressUpdate(*values)
}