Glide 4.0 解决图片缓存两次加载图片相同 StringSignature 找不到类

一、起因

旧版本Glide.signature()方法形参支持使用StringSignature。但在Glide 4.0里面这个方法不仅被移到RequestOptions中,而且形参改为Key

二、解决办法

2.1 Key

不过Key是一个接口,需要实现抽象方法

void updateDiskCacheKey(MessageDigest messageDigest);

2.2 ObjectKey

Key还有一个使用相对方便的子类ObjectKey,构造方法以Object为参数,下面是实际用法:

public static RequestOptions userAvatarOptions = new RequestOptions()
            .placeholder(R.drawable.def_avatar)
            .error(R.drawable.def_avatar)
            .signature(new ObjectKey(System.currentTimeMillis()))
            .encodeQuality(70);

代码中创建了一个ObjectKey实例,并把当前时间戳整形值作为参数。

三、源码

顺便贴出KeyObjectKey的源码,请自行查阅:

3.1 Key

public interface Key {
  String STRING_CHARSET_NAME = "UTF-8";
  Charset CHARSET = Charset.forName(STRING_CHARSET_NAME);

  void updateDiskCacheKey(MessageDigest messageDigest);

  @Override
  boolean equals(Object o);

  @Override
  int hashCode();
}

3.2 ObjectKey

public final class ObjectKey implements Key {
  private final Object object;

  public ObjectKey(Object object) {
    this.object = Preconditions.checkNotNull(object);
  }

  @Override
  public String toString() {
    return "ObjectKey{"
        + "object=" + object
        + '}';
  }

  @Override
  public boolean equals(Object o) {
    if (o instanceof ObjectKey) {
      ObjectKey other = (ObjectKey) o;
      return object.equals(other.object);
    }
    return false;
  }

  @Override
  public int hashCode() {
    return object.hashCode();
  }

  // Charset CHARSET = Charset.forName("UTF-8");
  @Override
  public void updateDiskCacheKey(MessageDigest messageDigest) {
    messageDigest.update(object.toString().getBytes(CHARSET));
  }
}

四、参考链接

StringSignature class not found #2692

最终解决方案

                 RequestOptions userAvatarOptions = new RequestOptions()
//            .placeholder(R.drawable.def_avatar)
//            .error(R.drawable.def_avatar)
                            .signature(new ObjectKey(System.currentTimeMillis()));
                    Glide.with(ProfileActivity.this).applyDefaultRequestOptions(userAvatarOptions).load(iamgePath).apply(RequestOptions.bitmapTransform(new CircleCrop())).
                    into(mIvApHeader);


 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

安果移不动

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值