1090페이지 네트워크장에서
HTTP 비동기 다운로드 부분입니다.
그림파일을 웹에서 다운받아서 이미지뷰에 표시해주는 방식인데...
DDMS로 확인해보니 파일은 경로에 맞게 다운로드가 되는데 앱상에서 이미지뷰에 표시가 되질 않습니다.
숨겨진 버그를 잡아죽여주세요.ㅠㅠ
else if(v.getId() == R.id.button2) {
Log.i("DeBug", "버튼2 이벤트 리스터 진입");
imageUrl = "http://www.winapi.co.kr/data/child3.jpg";
int idx = imageUrl.lastIndexOf('/');
String localimage = imageUrl.substring(idx + 1);
String path= Environment.getDataDirectory().getAbsolutePath();
path += "/data/example.backdown2/files/" + localimage;
if( new File(path).exists() == false) {
Toast.makeText(this, "파일이 존재하지 않아 다운로드 받습니다.", 1000).show();
DownloadImage(imageUrl, localimage);
}
Toast.makeText(this, "파일이 존재하기에 캐쉬에 있는 파일을 불러옵니다.", 1000).show();
Bitmap bitmap = BitmapFactory.decodeFile(path);
img.setImageBitmap(bitmap);
}
위의 부분은 버튼클릭에 구현된 부분입니다.
int idx = imageUrl.lastIndexOf('/');
String localimage = imageUrl.substring(idx + 1);
String path= Environment.getDataDirectory().getAbsolutePath();
이부분도 잘 이해가 되지 않습니다...ㅠㅠ
그리고 아래 부분은 다운로드 핵심 메서드입니다.
boolean DownloadImage(String url, String FileName) {
URL imageurl;
int Read;
try {
imageurl = new URL("url);
HttpURLConnection conn = (HttpURLConnection)imageurl.openConnection();
// int len = conn.getContentLength();
// byte[] raster = new byte[len];
InputStream is = conn.getInputStream();
BufferedInputStream bis = new BufferedInputStream(is);
FileOutputStream fos = openFileOutput(FileName, 0);
while((Read = bis.read())!= -1) {
fos.write(Read);
}
is.close();
fos.close();
conn.disconnect();
}catch(Exception ee) { return false;}
return true;
}
도대체 왜 이미지뷰에 표시가 되지 않는걸까요?
네트워크부분은 언제나 별도의 스레드로 구성!!