Glide 加载二进制图片不能及时更换的问题

2018-10-09  本文已影响0人  CHNEGC

最近在项目中种遇到了一个比较奇葩的问题,需求要求上传图片要的是图片的二进制流,而不是常用的模式,上传到图片到服务器用返回的url(http://xxxx...)形式的方式保存到数据库,

顺便附上转二进制的代码:

/**
     * 图片文件转Base64字符串 * @param path 文件所在的绝对路径加文件名
     *
     * @return
     */
    private String fileBase64String(String path) {
        try {
            FileInputStream fis = new FileInputStream(path);
            //转换成输入流 
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            byte[] buffer = new byte[1024];
            int count = 0;
            while ((count = fis.read(buffer)) >= 0) {
                baos.write(buffer, 0, count);//读取输入流并写入输出字节流中 
            }
            fis.close();//关闭文件输入流 
            String uploadBuffer = new String(Base64.encodeToString(baos.toByteArray(), Base64.DEFAULT)); //进行Base64编码 
            return uploadBuffer;
        } catch (Exception e) {
            return null;
        }
    }

进入正题,

通过Glide用二进制的方式加载图片的时候有问题了,第一次加载二进制图片是没有问题的能正常显示,但是再次选择新的图片转换成二进制,再进行显示的时候,新的图片并不能正常显示,找了大半天的原因最终在Glide源码发现有设置一个
.apply(signatureOf(new ObjectKey(UUID.randomUUID())))
在内存某段时间内,设置新的二进制图片是不生效的,

最终解决:

Glide.with(mContext).load(CommonUtils.stringToByte(url))
                .apply(initGlideOptions(defaultIds, errorIds))
                .apply(signatureOf(new ObjectKey(url)))//设置内存一个临时的tag值,在某段时间内,如果是同一个图片就直接取内存里的
.into(imageView);

注:更新新的版本发现load(byt[] model)这个方法的源码已经变了,我没有更新,不知道新的版本有没有这个问题,


图片.png
上一篇下一篇

猜你喜欢

热点阅读