【发布时间】:2015-10-23 10:00:38
【问题描述】:
作为我程序的一部分,我需要显示属于某个文件夹的图像(JPG 文件)。为此,我有以下代码:
private ArrayList<ImageGalleryItem> getData() {
final ArrayList<ImageGalleryItem> imageItems = new ArrayList<>();
try {
Intent intent = getIntent();
String imagesFolder = intent.getStringExtra("SourceFolder");
String questionId = Integer.toString(intent.getIntExtra("QuestionId", 0));
File file = new File(imagesFolder);
if (file.exists() && file.isDirectory()) {
File[] files = file.listFiles();
for (File f : files) {
try {
if (f.getName().startsWith(questionId + "_")) {
Bitmap bitmap = BitmapFactory.decodeFile(f.getPath());
imageItems.add(new ImageGalleryItem(bitmap, f.getName()));
}
}
catch (Exception e)
{
Log.e("TDC@", e.getMessage());
}
}
}
}
catch (Exception e)
{
Log.e("TDC@", e.getMessage());
}
return imageItems;
}
指令“BitmapFactory.decodeFile(f.getPath());”为除其中一个文件之外的所有文件创建位图文件。当到达冲突文件的代码时,decodeFile 会抛出异常,但奇怪的是 try catch 块没有捕获到异常。
使用F7调试时,BitmapFactory.java中抛出异常,在此代码所示的throw中:
try {
bm = nativeDecodeByteArray(data, offset, length, opts);
if (bm == null && opts != null && opts.inBitmap != null) {
throw new IllegalArgumentException("Problem decoding into existing bitmap");
}
setDensityFromOptions(bm, opts);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_GRAPHICS);
}
所以问题是,为什么无法正确解码位图以及为什么没有捕获异常。
如果我在手机文件管理器中浏览该文件,并打开该文件,它显示正确,所以图像格式没有问题。此外,此图像是用相机拍摄的,与其他正确解码的图像相同。
如何解决这个问题,或者,有没有其他方法可以做到这一点?
【问题讨论】:
-
如果异常已被捕获,则无法在您的代码中捕获该异常。第一个捕获它:docs.oracle.com/javase/tutorial/essential/exceptions/… 无论如何,android 代码已经在处理该错误,并且该错误与“问题解码为现有位图”有关。所以你提供了一个非法的论点。不知何故,该文件是不同的。删除有问题的图像,看看它是否完成。如果完成,请查看有问题的图片,看看有什么不同,重新保存,等等。
标签: android android-image android-bitmap