使用外部存储中文件路径设置ImageView图片

4

你好,我想使用我在SQLite数据库中保存的路径来更改我的ImageView的图像。 我想要实现的是每秒运行一次,只要图像可用就会显示并保持,直到下一个图像可用为止。 但是如果没有要显示的内容,将使用默认图像。 但目前我想解决的主要问题是我无法使用我拥有的路径设置imageView。 我尝试了不同的解决方案,例如从路径中制作位图,但仍然收到相同的错误,即:E/BitmapFactory:无法解码流:java.io.FileNotFoundException:/mnt/sdcard/Echo/Images/Awesome4-00:01.jpg:打开失败:ENOENT(没有这样的文件或目录)

以下是我现在的代码:

String path = db.getImagePath(file_name, curTime);

                            Log.v("Your image filename", file_name);
                            Log.v("Your currentPosition", curTime);

                            Log.v("Your Path Playback edit", path);

                            try{
                                preview.setImageURI(Uri.parse(Environment.getExternalStorageDirectory()+"/Echo/Images/"+file_name));
                            }catch (Exception e){
                                e.printStackTrace();
                                preview.setImageResource(R.drawable.sample_image);
                            }

这是在可运行的方法下运行的。这是我得到的logcat:

V/Your Path: /mnt/sdcard/Echo/Images/
V/Your image filename: Awesome4 - 00:01.jpg
V/Your currentPosition: 00:01
V/Your Path Playback edit: /mnt/sdcard/Echo/Images/
E/BitmapFactory: Unable to decode stream: java.io.FileNotFoundException: /mnt/sdcard/Echo/Images/Awesome4 - 00:01.jpg: open failed: ENOENT (No such file or directory)
I/System.out: resolveUri failed on bad bitmap uri: /mnt/sdcard/Echo/Images/Awesome4 - 00:01.jpg
D/dalvikvm: GC_CONCURRENT freed 380K, 14% free 3067K/3560K, paused 74ms+3ms, total 226ms
V/Your image filename: Awesome4 - 00:02.jpg
V/Your currentPosition: 00:02
V/Your Path Playback edit: [ 06-27 04:14:07.691  6043: 6043 E/BitmapFactory ]
 /mnt/sdcard/Echo/Images/Awesome4 - 00:02.jpg: open failed: ENOENT (No such file or directory)
1个回答

6
如果有帮助的话,请查看此内容。
preview.setImageURI(Uri.parse(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Echo/Images/"+file_name));

这是我如何做到的...
public final static String APP_PATH_SD_CARD = "/DesiredSubfolderName/";
public final static String APP_THUMBNAIL_PATH_SD_CARD = "thumbnails";

public boolean saveImageToExternalStorage(Bitmap image) {
String fullPath = Environment.getExternalStorageDirectory().getAbsolutePath() + APP_PATH_SD_CARD + APP_THUMBNAIL_PATH_SD_CARD;

try {
File dir = new File(fullPath);
if (!dir.exists()) {
dir.mkdirs();
}

OutputStream fOut = null;
File file = new File(fullPath, "desiredFilename.png");
file.createNewFile();
fOut = new FileOutputStream(file);

// 100 means no compression, the lower you go, the stronger the compression
image.compress(Bitmap.CompressFormat.PNG, 100, fOut);
fOut.flush();
fOut.close();

MediaStore.Images.Media.insertImage(context.getContentResolver(), file.getAbsolutePath(), file.getName(), file.getName());

return true;

} catch (Exception e) {
Log.e("saveToExternalStorage()", e.getMessage());
return false;
}
}

实际上,我只有一个对此的评论。它应该限制输入文本,因为某些特殊字符在文件名中是不允许的。:)) 无论如何,谢谢,它帮助我意识到了我当时的错误。 :) - KaHeL

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接