Android调用createScaledBitmap()方法出现致命空指针错误求助
解决Bitmap.createScaledBitmap空指针问题
兄弟,我一看这个错误就明白症结所在了——你调用Bitmap.createScaledBitmap()的时候,前面BitmapFactory.decodeResource()返回的是null!虽然你没直接写getWidth(),但createScaledBitmap内部会自动去获取原Bitmap的宽高参数,原Bitmap是null的话,自然就触发空指针异常了。
下面给你一步步排查和解决的方案:
先确认资源ID和文件是否匹配
你用的R.mipmap.ic_launcher,先检查这几点:- 看看
res/mipmap文件夹下有没有对应的图标文件(不管是png/svg还是xml矢量图) - 有没有手滑打错资源名?比如多写了字母、大小写搞错了?
- 试试清理项目缓存再重新编译,有时候编译缓存会导致资源ID失效。
- 看看
确保你的Context是有效的
你传的context.getResources(),要保证这个context不是null,也不是已经被销毁的状态(比如Activity已经finish了还在调用)。可以提前加个判断:if (context == null || context.isDestroyed()) { // 上下文无效,直接返回或者做降级处理 return; }添加null判断,提前拦截崩溃
在调用缩放方法前,先判断解码出来的Bitmap是不是null,这样能避免崩溃还能定位问题:Bitmap originalBitmap = BitmapFactory.decodeResource(context.getResources(), R.mipmap.ic_launcher); if (originalBitmap == null) { // 资源加载失败,这里可以打日志提示,或者用默认图替代 Log.e("BitmapLoad", "Failed to load ic_launcher resource"); return; } Bitmap android_guy = Bitmap.createScaledBitmap(originalBitmap, 50, 50, true); // 别忘了回收原Bitmap,避免内存浪费 originalBitmap.recycle();检查资源文件本身是否正常
有时候图片文件损坏、格式不支持,或者放错了资源目录(比如把mipmap的图放到drawable里),也会导致解码失败。可以换一张确定能用的图片测试,或者重新导入一遍资源文件。
内容的提问来源于stack exchange,提问作者Fahad
相关产品推荐
相关产品推荐

