마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

코드는 단순한데 이상한곳에서 헤메고 있습니다.

0 추천

특정주소의 그림파일 또는 동영상 파일을 다운로드 받는 로직입니다.

보시다시피 정말 간단합니다.

 private Runnable fileDownLoad = new Runnable() {
  
  @Override
  public void run() {
   // TODO Auto-generated method stub
   URL url = null;
   HttpURLConnection conn = null;
   InputStream is = null;
   BufferedInputStream bis = null;
   
   FileOutputStream fos = null;
   BufferedOutputStream bos = null;
   try {
    url = new URL("http://blog.joins.com/usr/s/i/sima4020/1/명화150.jpg");
    conn = (HttpURLConnection) url.openConnection();
    Log.i("URLConnection", conn.toString());
    
    is = conn.getInputStream();
    bis = new BufferedInputStream(is, 1024);
    
    fos = new FileOutputStream(StoragePath.LOCAL_PATH + "/EndersGame.jpg");
    bos = new BufferedOutputStream(fos);
    
    byte[] buff = new byte[1024];
    int byteRead = 0;
    
    while((byteRead = bis.read(buff, 0, 1024)) != -1) {
     Log.i("down", ""+byteRead);
     fos.write(buff, 0, byteRead);
     fos.flush();
    }
    
    bos.close();
    fos.close();
    bis.close();
    is.close();
   }catch(Exception ee) {Log.i("Exception", ee.toString());}
    
  }
 };

 

파일을 다운로드 받는 로직중 쓰레드 부분입니다.

디버깅을 걸어보면 is = conn.getInputStream(); 여기서 자꾸 걸려서

확인해보니 계속 java.io.FileNotFoundException 이 발생하네요.

다른 경로의 동영상이나 이미지주소를 넣어도 똑같네요;;

원인을 못찾겠습니다.

살려주세요.

갸아악 (21,260 포인트) 님이 2014년 1월 7일 질문

2개의 답변

0 추천
permission ?
카라드레스 (2,910 포인트) 님이 2014년 1월 7일 답변
퍼미션은 제대로 줬는데요.ㅠㅠ
0 추천

StoragePath.LOCAL_PATH + "/EndersGame.jpg" 가 정확하게 어떤 값이 찍히는지 확인해보시기 바랍니다.

그리고 파일 존재 유무도 체크해서 없으면 createNewFile() 해주셔야 할듯 하네요

Gradler (109,780 포인트) 님이 2014년 1월 7일 답변
정확한 주소가 찍히고
그 주소를 브라우저에 붙여넣기 하면
정확히 이미지가 출력됩니다..
위의 코드 논리적 로직상에는 이상이 없는건가요?
LOCAL_PATH 이미지를 브라우저에 넣어서 출력되는것을 확인한다는것자체가 이상하군요...
해당 부분에는 서버의 파일이 위치한 경로를 넣는게 아니라 로컬에 저장될 파일 객체를 넣어주셔야 합니다.
아 제가 잠시 착각을 하고 답글을 드렸네요;;
위에 URL말씀하시는줄 알고;;
아무거나나님께서 말씀하시는 부분은 어떤값이 찍히는지 볼수가 없어요.
그 위에줄에 InputStream에서 익셉션이 떨어지거든요..
위에 언급한 익셉션이라면 FileNotFoundException 파일을 찾을 수 없기 때문에 나는 익셉션입니다. 위 익셉션은 InputStream 에서 날 수 없는 에러일텐데요.. 우선 에러 로그를 확실하게 올려주시고, 제가 추측하기로는 지금 없는 파일에 뭔가 쓰려고 했기 때문에 에러가 나는거라고 생각됩니다.
...