捕获 BitmapFactory 异常

问题描述 投票:0回答:2

我只是尝试使用 BitmapFactory 类从文件加载位图,如下所示:

Bitmap b = BitmapFactory.decodeFile(getActivity().getFilesDir() + "/myImage.jpg");

除了文件系统上不存在该文件并且抛出 java.io.FileNotFoundException (没有这样的文件或目录)的情况之外,这工作正常。我的问题是,我如何捕获这个异常并继续?我已将该语句放在 try 块中,但 catch 语句表示任何 FileNotFoundException 都永远不会到达该语句。查看 BitmapFactory 类可以发现它没有抛出任何异常。我在这里做错了什么?

android exception bitmapfactory
2个回答
0
投票

尝试明确定义正确的

Exception

try{
    Bitmap b = BitmapFactory.decodeFile(getActivity().getFilesDir() + "/myImage.jpg");
}catch(java.io.FileNotFoundException ex){
   //Caught exception
}

0
投票

此答案已使用 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
是否为空,如果是则采取相应的行动,但这里不会捕获任何异常。

© www.soinside.com 2019 - 2024. All rights reserved.