Я пытаюсь сохранить фотографию, сделанную камерой в приложении для Android. Я использую класс AsyncTask для выполнения задания, однако в функции onBackground генерируется исключение - FileNotFoundException. Это происходит, хотя у меня есть права на чтение и запись для внешнего хранилища в манифесте.Файл не найден при сохранении изображения
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 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
Так, очевидно, он прыгает, чтобы поймать блок при попытке записать файл. На мой взгляд, путь тоже выглядит хорошим.
Любые идеи?
EDIT: трассировка стека
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
почему вы возвращаетесь __url__ дважды? –
Да, я забыл удалить второй. но это не имеет значения, потому что программа никогда не достигает конца блока try в любом случае – user4359659
Можете ли вы добавить Stacktrace исключения? Может возникнуть проблема разрешения: [JavaDoc] (http://docs.oracle.com/javase/7/docs/api/java/io/FileOutputStream.html#FileOutputStream%28java.io.File%29). – Tom