0

카메라로 만든 사진을 Android 애플리케이션에 저장하려고합니다. AsyncTask 클래스를 사용하여 작업을 수행하지만 onBackground 함수에서 예외가 발생합니다 (FileNotFoundException). 매니페스트에 외부 저장소에 대한 읽기 및 쓰기 권한을 가지고 있는데도 발생합니다. 이 파일을 작성하려고 할 때 블록을 잡으려고 점프 그래서 분명히이미지를 저장하는 중 파일을 찾을 수 없습니다.

01-02 16:53:12.692: I/System.out(16460): x 
01-02 16:53:12.692: I/System.out(16460): /mnt/sdcard/camtest 
01-02 16:53:12.692: I/System.out(16460): /mnt/sdcard/camtest/1420213992701.jpg 
01-02 16:53:12.722: I/System.out(16460): File not found 

:

private class SaveImageTask extends AsyncTask<byte[], Void, String> { 

    @Override 
    protected String doInBackground(byte[]... data) { 
     FileOutputStream outStream = null; 
     String url = "example"; 
     try {  
      System.out.println("x"); 
      File dir = new File (Environment.getExternalStorageDirectory() + "/camtest/"); 
      System.out.println(dir); 
      if(!dir.exists()) dir.mkdir();    
      Locale locale = new Locale("en"); 
      String fileName = String.format(locale, "%d.jpg", System.currentTimeMillis());   
      File outFile = new File(dir, fileName); 
      System.out.println(outFile.getAbsolutePath()); 
      outStream = new FileOutputStream(outFile);    
      outStream.write(data[0]); 
      outStream.flush(); 
      outStream.close();   
      System.out.println("x"); 
      refreshGallery(outFile);   
      Toast.makeText(getApplicationContext(), "try", Toast.LENGTH_LONG).show(); 
      url = outFile.getAbsolutePath(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
      System.out.println("File not found"); 
     } catch (IOException e) { 
      e.printStackTrace(); 
      System.out.println("IO exception"); 
     } finally { 
     } 
     return url; 
    } 

    @Override 
    protected void onPostExecute(String result) { 
     // TODO Auto-generated method stub 
     super.onPostExecute(result); 
     locationToSave.setPhotoURL(result); 
     Toast.makeText(getApplicationContext(), result, Toast.LENGTH_LONG).show(); 

    } 
} 

내 출력 로그는 다음과 같습니다. 내 생각에 그 길은보기에도 좋아 보인다.

아이디어가 있으십니까?

편집 : 스택 추적

01-02 17:18:48.300: W/System.err(18516): java.io.FileNotFoundException:  /mnt/sdcard/camtest/1420215528309.jpg: open failed: EACCES (Permission denied) 
01-02 17:18:48.300: W/System.err(18516): at libcore.io.IoBridge.open(IoBridge.java:406) 
01-02 17:18:48.300: W/System.err(18516): at java.io.FileOutputStream.<init>(FileOutputStream.java:88) 
01-02 17:18:48.300: W/System.err(18516): at java.io.FileOutputStream.<init>(FileOutputStream.java:73) 
01-02 17:18:48.300: W/System.err(18516): at  michal.myapp.activities.CameraActivity$SaveImageTask.doInBackground(CameraActivity.java:244) 
01-02 17:18:48.300: W/System.err(18516): at michal.myapp.activities.CameraActivity$SaveImageTask.doInBackground(CameraActivity.java:1) 
01-02 17:18:48.300: W/System.err(18516): at android.os.AsyncTask$2.call(AsyncTask.java:264) 
01-02 17:18:48.300: W/System.err(18516): at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
01-02 17:18:48.300: W/System.err(18516): at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
01-02 17:18:48.300: W/System.err(18516): at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:208) 
01-02 17:18:48.300: W/System.err(18516): at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
01-02 17:18:48.300: W/System.err(18516): at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
01-02 17:18:48.300: W/System.err(18516): at java.lang.Thread.run(Thread.java:864) 
01-02 17:18:48.300: W/System.err(18516): Caused by: libcore.io.ErrnoException: open failed: EACCES (Permission denied) 
01-02 17:18:48.310: W/System.err(18516): at libcore.io.Posix.open(Native Method) 
01-02 17:18:48.310: W/System.err(18516): at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
01-02 17:18:48.310: W/System.err(18516): at libcore.io.IoBridge.open(IoBridge.java:390) 
01-02 17:18:48.310: W/System.err(18516): ... 11 more 
+0

왜 __url__ 두 번 반환합니까? –

+0

예, 두 번째 것을 삭제하는 것을 잊었습니다. 그러나 프로그램이 try 블록의 끝 부분에 결코 도달하지 않기 때문에 무의미합니다. – user4359659

+0

예외의 스택 추적을 추가 할 수 있습니까? 권한 문제가있을 수 있습니다. [JavaDoc] (http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#FileOutputStream%28java.io.File%29). – Tom

답변

관련 문제