我正在使用Glide从Firebase存储中获取和显示照片。当设备在线时,情况非常好。
当用户更新个人资料图片(firebase存储参考更改)时,Glide无法从Firebase存储的离线缓存中获取照片。
我不想使用Glide缓存照片。我只想retrieve the cached photo from Firebase storage's offline cache
。是否有任何可能的方法或解决方法来解决此问题。
这是我的代码。
滑翔模块
@GlideModule
class MyGlideModule : AppGlideModule() {
override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
registry.append(StorageReference::class.java, InputStream::class.java,
FirebaseImageLoader.Factory())
}
}
从firebase存储中获取个人资料图片的代码
GlideApp.with(profileIcon.context)
.load(customerPictureReference)
.centerCrop()
.placeholder(R.drawable.ic_profile_placeholder)
.into(profileIcon)
答案 0 :(得分:2)
问题是Firebase没有缓存图片(有关详细信息,请参阅here)。
您应该能够配置Glide以在本地缓存图像,例如(请参阅here更多):
@GlideModule
public class GiphyGlideModule extends AppGlideModule {
@Override
public void applyOptions(Context context, GlideBuilder builder) {
builder.setMemoryCache(new LruResourceCache(10 * 1024 * 1024));
}
@Override
public void registerComponents(Context context, Glide glide, Registry registry) {
registry.append(Api.GifResult.class, InputStream.class, new GiphyModelLoader.Factory());
}
}
然后,您只需在通话中添加.diskCacheStrategy(DiskCacheStrategy.ALL)
即可。类似的东西:
GlideApp.with(profileIcon.context)
.load(customerPictureReference)
.diskCacheStrategy(DiskCacheStrategy.ALL)
.centerCrop()
.placeholder(R.drawable.ic_profile_placeholder)
.into(profileIcon)
您可以使用的另一个选项是Picasso,它也会缓存图像。
要首先从本地缓存中检索图像,如果无法在线尝试,您可以使用以下内容:
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");
}
});
}
});