You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

BitmapFactory.Options返回null:无法从缓存获取Bitmap始终为空

无法从缓存获取Bitmap返回null的排查方案

你的代码逻辑是先从缓存取Bitmap,取不到就解码文件再存入缓存,但缓存始终返回null,大概率是这几个问题导致的:

  • 缓存键不匹配
    确认fileName在调用getBitmapFromCache和addBitmapToCache时完全一致:

    • 检查路径大小写(Android系统区分路径大小写,Windows不区分)
    • 路径分隔符是否统一(避免/和\混用)
    • 文件名有没有前后空格或特殊字符
  • BitmapCacheUtil内部实现存在bug
    检查你的缓存工具类核心逻辑:

    • addBitmapToCache是否真的把Bitmap和对应的fileName键绑定存储?比如是不是用HashMap时把键值搞反了,或者缓存容器初始化错误
    • getBitmapFromCache是否正确根据fileName查询?比如有没有误判键的存在,或者返回时做了不必要的处理导致返回null
    • 如果是LruCache这类内存缓存,检查缓存大小是否设置过小,导致刚存入的Bitmap被系统立刻回收
  • 首次解码文件就返回null
    如果BitmapFactory.decodeFile(fileName, opt)本身就解码失败返回null,那存入缓存的就是null,后续获取自然也是null:

    • 打印new File(fileName).exists()验证文件是否真实存在、路径是否正确
    • 检查App是否有读取该文件的权限(比如Android 6.0以上需要动态申请存储权限)
    • 确认文件不是损坏的图片,或者格式不被BitmapFactory支持
  • 临时排查日志
    给代码加日志快速定位问题:

    public static Bitmap readBitMap(String fileName) {
        Bitmap bitmapFromCache = BitmapCacheUtil.getInstance().getBitmapFromCache(fileName);
        Log.d("BitmapCache", "缓存获取结果:" + fileName + " -> " + (bitmapFromCache != null));
        if (null != bitmapFromCache) {
            return bitmapFromCache;
        }
        BitmapFactory.Options opt = new BitmapFactory.Options();
        opt.inJustDecodeBounds = false;
        opt.inPreferredConfig = Bitmap.Config.RGB_565;
        opt.inPurgeable = true;
        opt.inInputShareable = true;
        opt.inSampleSize = 1;
        bitmapFromCache = BitmapFactory.decodeFile(fileName, opt);
        Log.d("BitmapCache", "文件解码结果:" + fileName + " -> " + (bitmapFromCache != null));
        BitmapCacheUtil.getInstance().addBitmapToCache(fileName, bitmapFromCache);
        // 存入后立刻再取一次验证
        Bitmap temp = BitmapCacheUtil.getInstance().getBitmapFromCache(fileName);
        Log.d("BitmapCache", "存入后再取结果:" + fileName + " -> " + (temp != null));
        return bitmapFromCache;
    }
    

    通过日志就能直接看出是缓存存不进去、解码失败还是键不匹配。

内容的提问来源于stack exchange,提问作者Dinuka Shehan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 19:20:58