最近用户提了个单子是上传某张图片时会闪退,日志显示是压缩图时获取的的bitmap为null
最开始以为是用户路径有问题,毕竟谷歌大大改了那么多版本,又是权限,又是隔离缓存的,谁知道用户什么版本,什么情况。直到联系用户拿到图片才知道是自己丢的代码问题。
emmm.........
具体代码就不说了,直接说几种解决方案吧
1.第一种:路径问题
看到null值,首先想到的就是是不是路径不对,知道拿到图片后,一步步打印,发现路径是正常打印出来的。其他图片也正常,但是就当前图片报空指针。
emmm.....可能是姿势不对,把当前的问题图片复制到和其他照片相同目录,然后继续。。,路径都对,但是就是
闪退,
闪退,
闪退。
基本排除闪退问题
2.权限问题
其实权限问题我并没有去考虑,因为我已经设置进行时权限了,所以并不考虑这个,列一下,只是为了告知有这么一种情况,如果出现当前问题可以看下自己权限是否正常开启
3.Android 10 分区存储问题
谷歌在对Android 10权限问题上进一步加强,在Android 10上如果不加requestLegacyExternalStorage=“true”也有可能会出现当前问题,谷歌大大也给出了解决方案
<manifest ... >
<!-- This attribute is "false" by default on apps targeting
Android 10 or higher. -->
<application android:requestLegacyExternalStorage="true" ... >
...
</application>
</manifest>
4.加载图片慢的问题
我在这篇帖子(https://blog.csdn.net/qq_35821446/article/details/106275094)看到会有加载慢的问题,但是我并没有出现过,在慢三百毫米时依然返回空值,不过可以做为参考看看
5.图片长款较大(也可能是图片过大)
这个就是我遇到的问题,当前用户的给的图片是80+兆(所以才压缩呀),分辨率为13824*18432,所以在获取图片时一直为空,搞了几个小时没找到问题所在,最终使用 options.inSampleSize解决
具体方案写下,过程就不说了,反正网上说的大多数方案我都试了下,没一点效果/。。。。
val options = BitmapFactory.Options()
options.inJustDecodeBounds = true
var bitmap = BitmapFactory.decodeFile(photoPath, options)
options.inSampleSize="缩放比例"
options.inJustDecodeBounds = false
bitmap = BitmapFactory.decodeFile(photoPath, options)
就写到这吧,也没什么写的了