【在Glide for Android中离线时加载已获取的图像】少年击剑更吹箫,剑气箫心一例消。这篇文章主要讲述在Glide for Android中离线时加载已获取的图像相关的知识,希望能为你提供帮助。
我使用的是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)
但这也无济于事。
答案选项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,无法使用WebView上传图像
- android减少摄像头捕获图像的文件大小小于500 kb
- Applescript制作新文件夹
- WebVR第4部分(画布数据可视化)
- WebVR第5部分(设计和实现)
- 线框映射(如何避免示波器蠕变)
- 所有的好处,没有麻烦(Angular 9教程)
- 不听客户的意见-为什么用户研究如此重要
- 保持控制(Webpack和React指南(2))