Java Android-如何将从firebase存储下载的照片保存到手机?

Java Android-如何将从firebase存储下载的照片保存到手机?,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,我需要将从firebase存储中下载的照片保存到手机中,以避免每次程序运行时都反复下载这些照片 url = "https://firebasestorage.googleapis.com/v0/b/****-*************.jpg" Picasso.get().load(url).into(imageView); 我查看图片没有问题,但是当我再次运行程序时,我不希望图像被重新加载。如何实现这一点?首先,您需要将图像所在的ImageView转换为位图 BitmapDrawable d

我需要将从firebase存储中下载的照片保存到手机中,以避免每次程序运行时都反复下载这些照片

url = "https://firebasestorage.googleapis.com/v0/b/****-*************.jpg"
Picasso.get().load(url).into(imageView);

我查看图片没有问题,但是当我再次运行程序时,我不希望图像被重新加载。如何实现这一点?

首先,您需要将图像所在的ImageView转换为位图

BitmapDrawable drawable = (BitmapDrawable) imageView.getDrawable();
Bitmap bitmap = drawable.getBitmap();
现在可以保存位图了

try (FileOutputStream out = new FileOutputStream(filename)) { //where filename is your path location file
    bitmap.compress(Bitmap.CompressFormat.PNG, 100, out);     
} catch (IOException e) {
    e.printStackTrace();
}

我认为您需要遵循这些步骤来获得好的图像并呈现给imageview

1) 从firebase下载并保存到android上的目录。 2) 显示来自android目录的图像

或者您可以使用从firebase下载图像。
从imageview获取图像不是一个好主意。

最好使用Glide 4而不是毕加索。Glide的图像缓存策略对于此类目的非常有用。
更多细节:

我认为应该有更好的方法。我不想等待图像进入imageView。看看这个答案,我认为这可以解决您的问题,在转换为位图后,您可以按照我在答案中描述的方式保存它,或者像byteArray一样直接保存它。毕加索不会一次又一次地下载您的图像,它只下载一次(在第一次调用url时)。第二、第三、第三节中的加载。。。try只是毕加索在缓存中浏览你的图像。检查探查器的数据消耗情况,并在网络关闭时尝试。