1

首先,我的权限

<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/. 加载图像时出现警告。

4

2 回答 2

2

你的文件被保存了吗?如果是,可能是在您读取文件之前未触发 mediascanner。由于未触发 mediascanner,因此内容提供者不会拥有您的文件的条目(您的文件未编入索引)。如果您的文件使用 保存"saveIamgeToLocalStore",则从代码中触发 mediascanner 一次,如下所示:

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

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

于 2013-08-06T06:50:25.280 回答
0

您需要编写文件现有检查。这样就更容易发现问题了。简短的例子

File test = new File (URI)
if ( test.exists() )
{
    // do your computation
} else 
{
    // find problem in file path
}
于 2013-08-06T06:59:23.243 回答