OpenInputStream返回文件未找到异常,但文件在那里

时间:2013-02-27 16:50:26

标签: android

我正在尝试从SD卡缩放位图并将其写入手机内存。然后在稍后解码它以将其添加到HashMap

问题是虽然路径正确且存在缩放图像(我检查过),但我发现文件未找到异常

这是保存部分

        Bitmap yourSelectedImage = BitmapFactory.decodeStream(imageStream, null, options );         
        File imageRootPath = getFilesDir();
        File imageRoot = new File(imageRootPath, imagUri.getLastPathSegment()+".png");
        FileOutputStream out = new FileOutputStream(imageRoot);
        yourSelectedImage.compress(Bitmap.CompressFormat.PNG, 90, out);

这是我阅读文件时的部分

try {
Uri mainImgeUri = Uri.parse(imageRoot.toString());
File imageFile = new File(mainImgeUri.toString());
if(imageFile.exists()){
   System.out.println("it does");
}
InputStream imageStream = ListPropertiesBaseActivity.this.getContentResolver().openInputStream(mainImgeUri); // I am getting file not found error

Bitmap yourSelectedImage =BitmapFactory.decodeStream(imageStream);
hmBitmap.put(ID, yourSelectedImage);
imageStream.close();
} catch (Exception e) {

e.printStackTrace();
}

OpenInputStream是否无法从内部手机内存中读取?或者可能是保存产生的图像不好?

虽然我可以通过手动浏览到文件并打开它来查看它

请注意,System.out.Println已执行,因此表示该文件存在

3 个答案:

答案 0 :(得分:2)

您是否尝试过Logging imageStream以查看uri实际上是什么?

答案 1 :(得分:1)

使用File uri创建mainImgeUri对象并检查文件是否存在,将此文件传递给openInputStream()方法

答案 2 :(得分:1)

我找到了它。好吧,我找到了解决方法,但我无法解释以前的行为以及为什么它不起作用。我用

替换了这个getContentResolver
FileInputStream fis = new FileInputStream(imageFile);
Bitmap yourSelectedImage =BitmapFactory.decodeStream(fis);

这很有用。知道为什么!虽然