2013-11-15 3 views
4

Я пытаюсь поделиться PNG с ShareActionProvider в Android. Когда я открываю PNG для Uri, он говорит, что файл не найден. open failed: ENOENT (No such file or directory), хотя я зашел в файловую систему и видел ее сам. Я попробовал это на своем телефоне и AVD с ошибкой сохранения. Я огляделся, но не нашел ответов. Любая помощь приветствуется.ENOENT (Нет такого файла или каталога) Когда есть файл

Вот где я пытаюсь открыть файл:

File file = new File(getFilesDir()+"wifiqr/", "QRCode.png"); 
       file.setReadable(true, false); 
       Uri uri = Uri.fromFile(file); 
       Intent intent = new Intent(Intent.ACTION_SEND); 
       intent.setType("image/*"); 
       intent.putExtra(Intent.EXTRA_STREAM,uri); 
       provider.setShareIntent(intent); 

Если это помогает здесь, где я сохранить его:

String fileName = getFilesDir()+"/wifiqr/" + "QRCode.png"; 
       etSSID.setText(fileName); 
       OutputStream stream = null; 
       try { 
        stream = new FileOutputStream(fileName); 
        bmp.compress(Bitmap.CompressFormat.PNG, 80, stream); 
        stream.close(); 
       } catch (FileNotFoundException e) { 
        e.printStackTrace(); 
       } catch (IOException e) { 
        e.printStackTrace(); 
       } 

Наконец журнал ошибок:

11-15 02:34:43.243  594-892/com.android.mms E/Mms/media: IOException caught while opening or reading stream 
     java.io.FileNotFoundException: /data/data/com.frostbytedev.wifiqr/fileswifiqr/QRCode.png: open failed: ENOENT (No such file or directory) 
     at libcore.io.IoBridge.open(IoBridge.java:416) 
     at java.io.FileInputStream.<init>(FileInputStream.java:78) 
     at java.io.FileInputStream.<init>(FileInputStream.java:105) 
     at android.content.ContentResolver.openInputStream(ContentResolver.java:447) 
     at com.android.mms.model.MediaModel.initMediaSize(MediaModel.java:235) 
     at com.android.mms.model.MediaModel.<init>(MediaModel.java:74) 
     at com.android.mms.model.RegionMediaModel.<init>(RegionMediaModel.java:36) 
     at com.android.mms.model.RegionMediaModel.<init>(RegionMediaModel.java:31) 
     at com.android.mms.model.ImageModel.<init>(ImageModel.java:73) 
     at com.android.mms.ui.SlideshowEditor.changeImage(SlideshowEditor.java:163) 
     at com.android.mms.data.WorkingMessage.internalChangeMedia(WorkingMessage.java:640) 
     at com.android.mms.data.WorkingMessage.changeMedia(WorkingMessage.java:588) 
     at com.android.mms.data.WorkingMessage.setAttachment(WorkingMessage.java:453) 
     at com.android.mms.ui.ComposeMessageActivity.addImage(ComposeMessageActivity.java:3150) 
     at com.android.mms.ui.ComposeMessageActivity.addAttachment(ComposeMessageActivity.java:3291) 
     at com.android.mms.ui.ComposeMessageActivity.access$5900(ComposeMessageActivity.java:167) 
     at com.android.mms.ui.ComposeMessageActivity$35.run(ComposeMessageActivity.java:3236) 
     at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:129) 
     at com.android.mms.ui.AsyncDialog$ModalDialogAsyncTask.doInBackground(AsyncDialog.java:84) 
     at android.os.AsyncTask$2.call(AsyncTask.java:287) 
     at java.util.concurrent.FutureTask.run(FutureTask.java:234) 
     at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1080) 
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:573) 
     at java.lang.Thread.run(Thread.java:856) 
     Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory) 
     at libcore.io.Posix.open(Native Method) 
     at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110) 
     at libcore.io.IoBridge.open(IoBridge.java:400) 
     ... 24 more 

ответ

1

В вашем коде сохранения у вас есть:

String fileName = getFilesDir()+"/wifiqr/" + "QRCode.png"; 

В коде нагрузки у вас нет слэш перед «wifiqr /»:

File file = new File(getFilesDir()+"wifiqr/", "QRCode.png"); 

Кажется, вы имели в виду поставить «/» до «wifiqr /» в коде загрузки. Ваш код сохранения означает, что getFilesDir() может не иметь на нем косой черты.

Имя файла, который он пытается открыть даже напечатан в журнале:

/data/data/com.frostbytedev.wifiqr/fileswifiqr/QRCode.png 

Это не кажется, что вы ожидаете, чтобы иметь каталог под названием «fileswifiqr».

Недостающее звено в вашей попытке устранения неполадок было: пока вы знали, что у вас есть файл , намеревающийся открыть, вам все равно необходимо убедиться, что ваш код действительно открыл файл, который вы намеревались открыть.

+0

Исправлено это и до сих пор ошибка, и я смотрел на путь, и у них одинаковые точные пути. –

+0

И теперь в этой ошибке говорится: '/ data/data/com.frostbytedev.wifiqr/files/wifiqr/QRCode.png' , и вы можете проверить другими способами, что файл существует (например, 'ls/data/data/com.frostbytedev.wifiqr/files/wifiqr/QRCode.png' в консоли показывает файл)? И вы распечатали путь, который вы сохраняете, и путь, по которому вы загружаете, и убедитесь, что они одинаковы? –

+0

Да, они точно такие же –

2

getFilesDir() является частным к этому конкретному приложению (то есть, другие приложения не могут прочитать его), как объяснено в openFileOutput (что тот же каталог getFilesDir возвращаются как в its documentation).

Если вы пытаетесь обмениваться файлами между приложениями, вы следуете Sharing Files training guide, чтобы другие приложения могли обращаться к вашим файлам.

Смежные вопросы