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

问题描述 投票:2回答:1

我使用的是Glide版本4.8.0

为了加载图像,我这样做

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

当设备连接到Internet时,图像会成功,但是当设备脱机时,如何从remoteURL中已经填充的缓存加载相同的图像?

我的自定义AppGlideModule看起来像这样

@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)

但这也无济于事。

android image android-glide
1个回答
2
投票

选项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");
            }
        });
    }
});
© www.soinside.com 2019 - 2024. All rights reserved.