我只是尝试使用 BitmapFactory 类从文件加载位图,如下所示:
Bitmap b = BitmapFactory.decodeFile(getActivity().getFilesDir() + "/myImage.jpg");
除了文件系统上不存在该文件并且抛出 java.io.FileNotFoundException (没有这样的文件或目录)的情况之外,这工作正常。我的问题是,我如何捕获这个异常并继续?我已将该语句放在 try 块中,但 catch 语句表示任何 FileNotFoundException 都永远不会到达该语句。查看 BitmapFactory 类可以发现它没有抛出任何异常。我在这里做错了什么?
尝试明确定义正确的
Exception
try{
Bitmap b = BitmapFactory.decodeFile(getActivity().getFilesDir() + "/myImage.jpg");
}catch(java.io.FileNotFoundException ex){
//Caught exception
}
此答案已使用 Java 11/Android 11 进行了测试,但可能仍适用于旧版本或新版本。
无法解码
流:java.io.FileNotFoundException:/storage/emulated/0/Android/data/com.xyz.myapp/files/myimage.png:打开
失败:ENOENT(没有这样的文件或目录)
“我如何捕捉这个异常?”
你不能,因为这不是真正的例外。
decodeFile
函数捕获实际的异常,然后使用 Log.e
将其打印到控制台(从 BitmapFactory
类复制的代码):
catch (Exception e) {
/* do nothing.
If the exception happened on open, bm will be null.
*/
Log.e("BitmapFactory", "Unable to decode stream: " + e);
}
正如文档所说:
退货
Bitmap 生成的解码位图,如果无法解码则为 null。
你唯一能做的就是检查返回的
Bitmap
是否为空,如果是则采取相应的行动,但这里不会捕获任何异常。