加载我刚刚捕获的图像时出现FileNotFoundException

时间:2019-02-26 20:39:30

标签: java android exception android-bitmap filenotfoundexception

我正在制作一个应用程序,允许用户捕获并成像,然后在拼图上使用该图像。我可以成功使用相机,但是在捕获图像后,应该将其带到从本地存储中加载图像的拼图屏幕时,会出现FNF异常。 (我在应用程序中有一个部分,显示用户可用于拼图的图像,新捕获的图像显示在此处-由于崩溃而重新启动应用程序之后)。

我的代码如下

return

return行上引发异常。请帮我解决这个问题。谢谢。  编辑:包裹尝试捕获 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'int android.graphics.Bitmap.getWidth()' on a null object reference at apps.mine.puzzle.Board.countTileSize(Board.java:60) at apps.mine.puzzle.PlayPuzzleActivity.onCreate(PlayPuzzleActivity.java:138) 行,现在显示Logcat

{{1}}

1 个答案:

答案 0 :(得分:1)

我有类似的问题,它将解决此问题:

if(BitmapFactory.decodeFile(Image[position])!=null)
{
    Bitmap bitmap=Bitmap.createScaledBitmap(BitmapFactory.decodeFile(Image[position]), 32, 32, true);
    imageView.setImageBitmap(bitmap);
}
else
{
    Log.d("TAG", "unable to decode");
}

此问题的主要原因是decodeResource由于以下原因之一而返回null:

  1. 图像文件已损坏
  2. 没有阅读权限
  3. 没有足够的内存来解码文件
  4. 该资源不存在
  5. 在options变量中指定的无效选项。

更新

如果您不想像@Zoe所指出的那样对文件进行两次解码,则可以修改decodeResource的代码,这样它将无需检查就可以进行空检查,就像这样:

public class BitmapScalingHelper
{
    public static Bitmap decodeResource(Resources res, int resId, int dstWidth, int dstHeight)
    {
        Options options = new Options();
        options.inJustDecodeBounds = true;
        BitmapFactory.decodeResource(res, resId, options);
        options.inJustDecodeBounds = false;
        options.inSampleSize = calculateSampleSize(options.outWidth, options.outHeight, dstWidth,
                dstHeight);
        options = new Options();
        Bitmap unscaledBitmap = BitmapFactory.decodeResource(res, resId, options);
        if(unscaledBitmap == null)
        {
            Log.e("ERR","Failed to decode resource" + resId + " " + res.toString());
            return null;
        }
        return unscaledBitmap;
    }
}