2013-11-15 42 views
4

我想与大家分享ShareActionProvider一个PNG的Android系统。当我向Uri打开PNG时,它说没有找到任何文件。 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 /数据/数据/ com.frostbytedev.wifiqr /文件/ wifiqr/QRCode.png'在控制台显示文件)?并且您已经打印出您要保存的路径以及您从中加载的路径,并验证它们是否相同? –

+0

是的,它们完全相同 –

相关问题