android 在同一URL中对不同图像进行滑动缓存

0lvr5msh  于 2023-05-12  发布在  Android
关注(0)|答案(3)|浏览(106)

我使用Glide库从服务器获取图像。我的问题是,当图像更新在服务器上与以前的图像相同的URL,滑翔显示以前的图像。我在代码中添加了这些行,但问题仍然存在:

.skipMemoryCache(true)
.diskCacheStrategy(DiskCacheStrategy.NONE)
.signature(new ObjectKey(String.valueOf(System.currentTimeMillis())))

我的完整代码是:

CircleImageView profileImageView = view.findViewById(R.id.profile_picture_image_view);
GlideApp.with(view.getContext())
                .load(sessionManager.getAvatar().replace("https", "http"))
                .error(R.drawable.default_pic)
                .skipMemoryCache(true)
                .diskCacheStrategy(DiskCacheStrategy.NONE)
                .signature(new ObjectKey(String.valueOf(System.currentTimeMillis())))
                .placeholder(R.drawable.ic_camera)
                .centerCrop()
                .into(profileImageView);

我该怎么办?

ctrmrzij

ctrmrzij1#

如果你正在使用Glide 4.x,请尝试:

var requestOptions = RequestOptions()
    requestOptions.skipMemoryCache(true)
    .diskCacheStrategy(DiskCacheStrategy.NONE)
    .signature(ObjectKey(System.currentTimeMillis()))
    Glide.with(this).load(url).apply(requestOptions).into(this)

因此,创建一个RequestOptions()对象,并通过它应用所需的标志

ghhaqwfi

ghhaqwfi2#

Glide会将图像缓存一段时间,之后将自动从该高速缓存中删除。Glide默认缓存过期时间为2分钟。但是,您可以根据需要使用diskCacheStrategy()方法配置该高速缓存过期时间。
要将该高速缓存过期时间设置为7天,可以使用以下代码:

Glide.with(context)
        .load(url)
        .diskCacheStrategy(DiskCacheStrategy.AUTOMATIC)
        .override(width, height)
        .skipMemoryCache(true)
        .signature(ObjectKey(System.currentTimeMillis() / (24 * 60 * 60 * 1000))))
        .into(imageView)
ilmyapht

ilmyapht3#

尝试这些选项
方案一

:-使用毕加索

示例代码

我是Gradle

implementation 'com.squareup.picasso:picasso:2.71828'

用法:-

Picasso.get().load("url_here).into(profileImageView);

方案2:-

// DownloadImage AsyncTask
    private class DownloadImage extends AsyncTask<String, Void, Bitmap> {

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
            progressBar.setVisibility(View.VISIBLE);
        }

        @Override
        protected Bitmap doInBackground(String... URL) {

            String imageURL = URL[0];

            Bitmap bitmap = null;
            try {
                // Download Image from URL
                InputStream input = new java.net.URL(imageURL).openStream();
                // Decode Bitmap
                bitmap = BitmapFactory.decodeStream(input);
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        @Override
        protected void onPostExecute(Bitmap result) {
            // set bitmap to imageview here
            }
        }
    }

用法:

// Execute DownloadImage AsyncTask
     new DownloadImage().execute("url_here");

相关问题