0

我需要的是:我正在使用 glide 在我的应用程序中显示图像。我需要为 glide 中的缓存图像设置到期时间。我知道我们可以使用签名(现在更改为 GlideImageVersion)。我发现要将到期时间设置为 600 秒,我使用了“ System.currentTimeMillis()/(1000 * 60 *10) ”。

编辑:从技术上讲,到期意味着,我需要为签名设置一个值,并且该值不应在 3,628,800 秒(60,480 分钟)内改变。

600 秒:

 currentTime = System.currentTimeMillis()
 ExpiryFor10mins = currentTime / (1000*60*10)  //For 10 minutes
Glide.with(getActivity())
    .load(mUser.getCoverPhoto())
    .error(R.drawable.bg_1)
    .signature(new StringSignature(ExpiryFor10mins.toInt())
    .listener(new RequestListener<String, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }
    })
    .into(mImageCover);

但我需要将此缓存到期时间设置为 3,628,800 秒,即 6 周。任何人都可以帮助弄清楚这个数学吗?提前致谢...

4

1 回答 1

1

您可以为此使用自己的 SharedPreferences,我知道它还有很长的路要走,但非常适合您的情况,让我们举个例子:-

SharedPreferences signaturePref = getActivity().getSharedPreferences("signature_for_glide",MODE_PRIVATE);

// take default value 0 till its not saved
// get save signature for current image
long savedSignature = signaturePref.getLong(mUser.getCoverPhoto().trim(),0);
long currentTime = System.currentTimeMillis();

if((currentTime - savedSignature) > 6 weeks millseconds){
    savedSignature = currentTime;
    signaturePref.putLong(mUser.getCoverPhoto().trim(),savedSignature);
}

Glide.with(getActivity())
    .load(mUser.getCoverPhoto())
    .error(R.drawable.bg_1)
    .signature(new StringSignature(savedSignature))
    .listener(new RequestListener<String, GlideDrawable>() {
        @Override
        public boolean onException(Exception e, String model, Target<GlideDrawable> target, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }

        @Override
        public boolean onResourceReady(GlideDrawable resource, String model, Target<GlideDrawable> target, boolean isFromMemoryCache, boolean isFirstResource) {
            mTextBioOther.setVisibility(!isMe ? View.VISIBLE : View.GONE);
            return false;
        }
    })
    .into(mImageCover);

试试这个解决方案,如果有任何错误请。问。

于 2021-09-23T06:06:52.610 回答