尝试从数据库加载图像时没有找到这样的文件或目录?

No such file or directory found when trying to load image from database?

我都这样,我已经把我的图片保存到外部目录了:

File imagesFolder = new File(Environment.getExternalStorageDirectory(), "Images");
imagesFolder.mkdirs();
image = new File(imagesFolder.getPath(), "MyImage_" + timeStamp + ".jpg");
fileUri = Uri.fromFile(image);

然后像这样将图像保存在数据库(SQLite)中:

contentValues.put(LocationsDB.FIELD_FILEPATH, fileUri.toString());

加载图片到imageView时:

String theimage = null;
.....
theimage = arg1.getString(arg1.getColumnIndex(LocationsDB.FIELD_FILEPATH));
.....
final Bitmap myImage = BitmapFactory.decodeFile(theimage);
ImageView image = (ImageView) findViewById(R.id.PicView);
image.setImageBitmap(myImage);

但是当 运行 应用程序出现此错误时:

01-10 12:12:26.943: E/BitmapFactory(30607): Unable to decode stream: java.io.FileNotFoundException: /file:/storage/emulated/0/Images/MyImage_20150110_121217.jpg: open failed: ENOENT (No such file or directory)

我在这里做错了什么?我以为这样就可以获取图像并显示图像了?

首先确保您的图像存储在 Image 文件夹中

但是你的问题是 fromFile() 方法,它将 file:// 添加到你的图像的绝对路径,所以 BitmapFactory 找不到你的图像并抛出 java.io.FileNotFoundException .

你的图片地址是

file:///storage/emulated/0/Images/MyImage_1234.jpg

而不是

/storage/emulated/0/Images/MyImage_1234.jpg

尝试改变

contentValues.put(LocationsDB.FIELD_FILEPATH, fileUri.toString());

contentValues.put(LocationsDB.FIELD_FILEPATH, image.getAbsolutePath());

问题是 new File() 没有创建文件。它创建一个指向该位置的指针。

您需要使用 OutputStream 来保存该文件:

// Open file
File imagesFolder = new File(Environment.getExternalStorageDirectory(), "Images");
imagesFolder.mkdirs();
File image = new File(imagesFolder.getPath(), "MyImage_.jpg");

// Create it if it doesn't exist
if (!image.exists()) {
    try {
        // Create file
        FileOutputStream outputStream = new FileOutputStream(image);
        outputStream.write("Hello".getBytes());
        outputStream.close();
        // Save ABSOLUTE_PATH to DB
        contentValues.put(LocationsDB.FIELD_FILEPATH, image.getAbsolutePath());
        ...
    } catch (IOException e) {
        e.printStackTrace();
    }
}

然后从数据库中获取路径并使用

String absPath = arg1.getString(arg1.getColumnIndex(LocationsDB.FIELD_FILEPATH));
final Bitmap myImage = BitmapFactory.decodeFile(absPath);