메인 쓰레드는 이미지 다운로드 동안 기다릴 수 없기 때문에 AsynkTask로 작성한다.
그리고 리스너를 달아주어 다운로드 완료 후 처리를 하도록한다.
ImageUrlDown.java
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
package com.example.test_html_bytecode;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
public class ImageUrlDown extends AsyncTask<String, String, Bitmap> {
// 다운로드 완료 후 호출 할 리스너
public interface OnPostDownLoadListener {
void onPost(Bitmap bitmap);
}
private Bitmap bitmap = null;
private OnPostDownLoadListener onPostDownLoad;
// 리스너 세팅
public ImageUrlDown(OnPostDownLoadListener paramOnPostDownLad) {
onPostDownLoad = paramOnPostDownLad;
}
@Override
protected Bitmap doInBackground(String... strings) {
try {
// 파라미터로 받은 url로 부터 이미지 다운로드
bitmap = BitmapFactory.decodeStream((InputStream) new URL(strings[0]).getContent());
return bitmap;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Bitmap bitmap) {
super.onPostExecute(bitmap);
// 이미지 다운로드 완료 후 리스너 호출
if (onPostDownLoad != null)
onPostDownLoad.onPost(bitmap);
}
}
|
cs |
호출은 아래와 같이한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
private void downloadImage() {
String imageURL = "http://puzi.tistory.com/image.png"; //이미지 URL
// 이미지 다운로드 클래스 생성 및 리스너 작성
ImageUrlDown imageUrlDown = new ImageUrlDown((bitmap) -> {
try {
// 파일 생성
File file = new File(filePath,fileName);
// 아웃풋 스트림 생성
FileOutputStream fileOutputStream = new FileOutputStream(file);
// 아웃풋 스트림 작성
bitmap.compress(Bitmap.CompressFormat.PNG,100,fileOutputStream);
// 아웃풋 스트림 출력
fileOutputStream.flush();
// 아웃풋 스트림 종료
fileOutputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
});
// url 전달
imageUrlDown.execute(imageURL);
}
|
cs |
참고 : https://lannstark.tistory.com/34?category=840464
'안드로이드 스튜디오[Android studio]' 카테고리의 다른 글
[안드로이드]px를 dp로 변환 (0) | 2021.08.09 |
---|---|
[안드로이드]Bitmap 이미지를 Base64로 html에 표시하기 (0) | 2021.08.05 |
navigation drawer의 icon색이 바뀌지 않는 문제 해결 (0) | 2021.07.30 |
토글 버튼(Toggle Button) 만들기 (0) | 2021.07.09 |
(안드로이드 스튜디오) 연속 클릭 구현 (0) | 2021.07.06 |