file.exists()为android中的现有文件返回false

时间:2013-12-07 04:34:27

标签: android image file bitmap decode

在我的应用中,用户可以从SD卡中选择图像并设置为个人资料图片。一切正常,但是当用户从sdcard图像中选择whatsapp文件夹中的图像时,无法解码。

我正在使用以下代码解码文件并在ImageView中显示。

if (imgFile.exists()) {                                 

Bitmap myBitmap = BitmapFactory.decodeFile(imgFile  
        .getAbsolutePath());                        

imgProfilePic.setImageBitmap(myBitmap);             
myBitmap = null;                                    
System.gc();                                        
Runtime.getRuntime().gc();                          

}

我正在选择图像路径/storage/sdcard0/WhatsApp/Media/WhatsApp Images/IMG-20130804-WA0000.jpg并且它存在于sdcard中,但file.exists始终返回false。 如果用户从其他文件夹而不是whatsapp中选择图像,它可以正常工作。

更新

我正在执行

之类的步骤
1. click on profilepic(imageview).
2. select options(from camera,galerry,or edit)
3. open selected or captured image in CropImage Activity.
4. display cropped image.

Anyhelp将不胜感激。谢谢。

2 个答案:

答案 0 :(得分:2)

我正在修改其他应用的图像。我想这可能是问题所在。那我做了什么?

  1. 选择图片并获取onActivityResult()
  2. 中的路径
  3. 使用以下代码
  4. 从临时文件中复制此路径中的图像
  5. 使用临时文件进行裁剪和其他处理
  6. private void copyFile(File sourceFile, File destFile) throws IOException {
        if (!sourceFile.exists()) {
            return;
        }
    
        FileChannel source = null;
        FileChannel destination = null;
        source = new FileInputStream(sourceFile).getChannel();
        destination = new FileOutputStream(destFile).getChannel();
        if (destination != null && source != null) {
            destination.transferFrom(source, 0, source.size());
        }
        if (source != null) {
            source.close();
        }
        if (destination != null) {
            destination.close();
        }
    
    }
    

    希望这可以帮助别人。

答案 1 :(得分:1)

如果你的ImageFile.exists()方法在android中提供false,但它存在于内存中,那么你肯定没有在你的项目的Write-external-storage文件中给出Manifest权限。在项目清单中添加此权限:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />