android - 在 Glide for Android 中离线时加载已获取的图像

标签 android image android-glide

我正在使用 Glide 4.8.0 版

为了加载图片,我这样做

GlideApp
    .with(HomePageFragment.this)
    .load(remoteURL)
    .diskCacheStrategy(DiskCacheStrategy.ALL)
    .into(mImageView);

当设备连接到互联网时,图像加载成功,但当设备进入离线时,如何从已经从remoteURL 获取的缓存中加载相同的图像?

我的 CustomAppGlideModule 看起来像这样

@GlideModule
public class CustomAppGlideModule extends AppGlideModule {

    @Override
    public void applyOptions(@NonNull Context context, @NonNull GlideBuilder builder) {
        builder.setMemoryCache(new LruResourceCache(20 * 1024 * 1024));
        builder.setDiskCache(new InternalCacheDiskCacheFactory(context, 100 * 1024 * 1024));
    }

}

我也试过

.onlyRetrieveFromCache(true)

但这也无济于事。

最佳答案

选项 1: 使用 DiskCacheStrategy.SOURCE 而不是 DiskCacheStrategy.ALL 它应该工作,因为 DiskCacheStrategy.SOURCE 将原始数据保存到缓存。

//Version 4.x
GlideApp
    .with(HomePageFragment.this)
    .load(remoteURL)
    .diskCacheStrategy(DiskCacheStrategy.DATA)
    .into(mImageView);

//Version 3.x
Glide.with(mContext)
   .load(url)
   .diskCacheStrategy(DiskCacheStrategy.SOURCE)
   .into(imageView);

选项 2:(如果以上不起作用)

使用 Glide 有什么特别的原因吗?你想试试毕加索吗,我发现毕加索在这方面做得更好。您可以使用以下代码进行离线缓存。如果找不到,它将首先从离线服务,然后搜索在线图像。

Picasso.with(getActivity())
.load(imageUrl)
.networkPolicy(NetworkPolicy.OFFLINE)
.into(imageView, new Callback() {
    @Override
    public void onSuccess() {
      //..image loaded from cache
    }

    @Override
    public void onError() {
        //Try again online if cache failed
        Picasso.with(getActivity())
                .load(posts.get(position).getImageUrl())
                .error(R.drawable.header)
                .into(imageView, new Callback() {
            @Override
            public void onSuccess() {
              //... image loaded from online
            }

            @Override
            public void onError() {
                Log.v("Picasso","Could not fetch image");
            }
        });
    }
});

关于android - 在 Glide for Android 中离线时加载已获取的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53140975/

相关文章:

android - 如何使用数据类中的 Glide 绑定(bind) RecyclerView 图像

android - 检索用户在 ListView 上单击的元素的 ID(在数据库中)

java - 我如何确定我的 javaFX 应用程序正在从相对路径加载图像?

java - ListView 项目动画在滚动时停止

image - 使用 FFmpeg 使用 .bat 文件将文件夹中的所有图像转换为 mp4 或 avi [Windows]

javascript - 仅当使用 Javascript 的源图像更改时才更新 CSS 背景图像

android - 如何使用 glide 库在 recyclerview 中加载更新图像而不是旧图像

android - Glide 使 ImageView wrap_content 无用并且没有使用目标的动画

android:用标点符号分割字符串并用数组中的句子维护标点符号

android - 如何以编程方式管理线性子布局?