保存/加载图像到本地存储/从本地存储

时间:2013-08-06 06:40:12

标签: android local-storage filenotfoundexception

首先,我的权限

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

保存获取图像的方法:

private void saveIamgeToLocalStore(Bitmap finalBitmap) { 
        String root = Environment.getExternalStorageDirectory().toString();
        File myDir = new File(root + "/temp");    
        myDir.mkdirs(); 
        String fname = "Profile_Image.png";
        File file = new File (myDir, fname);
        if (file.exists()) file.delete(); 
        try {
            FileOutputStream out = new FileOutputStream(file);
            finalBitmap.compress(Bitmap.CompressFormat.PNG, 100, out);
            out.flush();
            out.close(); 
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    private void loadImageFromLocalStore(String imageURI) { 
        try {
            Uri uri = Uri.parse(Environment.getExternalStorageDirectory().toString() + imageURI); 
            Bitmap bitmap = BitmapFactory.decodeStream(getActivity().getContentResolver().openInputStream(uri));
            profileImage.setImageBitmap(bitmap);
            profileImage.setTag("Other");
            select_image_button.setText(R.string.button_remove_profile_picture); 
        } catch (FileNotFoundException e) { 
            e.printStackTrace();
        } 
    }

用法:

saveIamgeToLocalStore(BitmapFactory.decodeFile(picturePath));
loadImageFromLocalStore("/temp/Profile_Image.png");

我得到了

java.io.FileNotFoundException: No content provider: ... 

警告。

我错过了什么?

PS:图像保存在/mnt/sdcard/temp/中。加载图像时会出现警告。

2 个答案:

答案 0 :(得分:2)

您的文件是否已保存?如果是,可能是在您读取文件之前未触发mediascanner。由于未触发mediascanner,因此内容提供商不会有该条目     对于你的文件(你的文件没有编入索引)。如果你的文件是用"saveIamgeToLocalStore"保存的,那么就像这样从代码中触发mediascanner:

sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED, Uri
                        .parse("file://"
                                + Environment.getExternalStorageDirectory())));

然后对文件进行读取。它应该工作。

答案 1 :(得分:0)

您需要编写文件现有检查。然后找到问题会更容易。 简短的例子

File test = new File (URI)
if ( test.exists() )
{
    // do your computation
} else 
{
    // find problem in file path
}