비동기 처리 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)
}
'Android' 카테고리의 다른 글
[안드로이드] Kotlin 비동기 처리 AsyncTask (0) | 2022.01.27 |
---|---|
[안드로이드] 코틀린 스레드(Thread)연습 - 타이머 만들기 (0) | 2022.01.27 |
[안드로이드] 코틀린 핸들러와 루퍼 (0) | 2022.01.26 |
[안드로이드] 코틀린 Thread 클래스 / Runnable 인터페이스 사용 (0) | 2022.01.26 |
[안드로이드] 코틀린 메인스레드 / 백그라운드스레드 (0) | 2022.01.26 |