在 Glide 中离线时加载已获取的图像 Android
Load already fetched image when offline in Glide for Android
我正在使用 Glide 版本 4.8.0
为了加载图片,我这样做了
GlideApp
.with(HomePageFragment.this)
.load(remoteURL)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(mImageView);
当设备连接到 Internet 时,图像加载成功,但当设备 离线时 ,如何从已从 [=14= 中获取的缓存中加载相同的图像]?
我的 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");
}
});
}
});
我正在使用 Glide 版本 4.8.0
为了加载图片,我这样做了
GlideApp
.with(HomePageFragment.this)
.load(remoteURL)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.into(mImageView);
当设备连接到 Internet 时,图像加载成功,但当设备 离线时 ,如何从已从 [=14= 中获取的缓存中加载相同的图像]?
我的 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");
}
});
}
});