从谷歌的firebase存储本地caching图像

我正在寻找一种方法,来caching谷歌Firebase平台上的存储图像。 现在,我可以下载图像,并将这些图像显示给用户,但是我无法caching,访问,即使没有互联网连接。 数据库可以脱机访问。 所以我想,也会有一种存储的方式。 我不想下载每一个图像到存储器,因此,我需要每次检查,如果图像仍然是最新的,它可能会改变。 这里有几个链接,我可以find,但没有回答我的问题。 也许有人知道一个解决方法,或者一个方法如何实现它。 谢谢!

下载文件: https : //firebase.google.com/docs/storage/android/download-files

caching(离线)数据库: https : //firebase.google.com/docs/database/android/offline-capabilities

更新1

这里是我如何“caching”与毕加索的文件,我添加了活动,关心下载:

Picasso.with(getApplicationContext()) .load(uri.toString()) .networkPolicy(NetworkPolicy.OFFLINE) .into(image1); 

任何帮助是受欢迎的。 谢谢!

恐怕Firebase SDK本身不提供图片caching。 但有几个伟大的图书馆可以为你做。 他们下载图像,将其显示在ImageView中,并将其caching在一行代码中。 只需向Firebase申请一个图片下载url,并将其提供给图片caching库即可。

像这样的东西,如果你select毕加索作为一个caching库:

 storageRef.child("users/me/profile.png").getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { @Override public void onSuccess(Uri uri) { // Got the download URL for 'users/me/profile.png' // Pass it to Picasso to download, show in ImageView and caching Picasso.with(context).load(uri.toString()).into(imageView); } }).addOnFailureListener(new OnFailureListener() { @Override public void onFailure(@NonNull Exception exception) { // Handle any errors } }); 

UPD:要使用Picasso磁盘caching,您需要明确地设置OkHttpDownloader。 看这里如何在毕加索使用磁盘caching?

感谢@ATom的通知。 Api已更改,而FirebaseUI 3.0现在使用Glide 4.x此处更新示例:

要从StorageReference中加载图像,首先在AppGlideModule中注册:

 @GlideModule public class MyAppGlideModule extends AppGlideModule { @Override public void registerComponents(Context context, Glide glide, Registry registry) { // Register FirebaseImageLoader to handle StorageReference registry.append(StorageReference.class, InputStream.class, new FirebaseImageLoader.Factory()); } } 

然后,您可以将StorageReference加载到ImageView中:

 // Reference to an image file in Cloud Storage StorageReference storageReference = ...; // ImageView in your Activity ImageView imageView = ...; // Download directly from StorageReference using Glide // (See MyAppGlideModule for Loader registration) GlideApp.with(this /* context */) .load(storageReference) .into(imageView); 

别忘了在build.gradle添加依赖build.gradle

 implementation 'com.firebaseui:firebase-ui-:3.1.0' 

在GitHub上回答问题

老答案:

FirebaseUI 1.0现已发布。 存储示例有FirebaseImageLoader类

使用FirebaseImageLoader显示的图像通过其在Firebase存储中的path进行caching,因此重复的加载速度会很快并节省带宽。

  // Reference to an image file in Firebase Storage StorageReference storageReference = ...; // ImageView in your Activity ImageView imageView = ...; // Load the image using Glide Glide.with(this /* context */) .using(new FirebaseImageLoader()) .load(storageReference) .into(imageView); 

我遇到过同样的问题。 尝试了所有可能的方法,但无法解决这个问题。 我认为问题在于由Firebase存储产生的链接。 毕加索通常caching它加载的图像。 我尝试了其他云服务,如cloudinary,LibPixel的链接图像格式(例如:.jpg)和毕加索caching这些链接图像。 Firebase链接以令牌编号结束。 奇怪的事情失败了!