Java 控制FirebaseStorage中的用户映像

Java 控制FirebaseStorage中的用户映像,java,android,firebase,firebase-storage,Java,Android,Firebase,Firebase Storage,我正在使用Firebase在Android上制作一个社交应用程序。每个用户最多可以上载三个图像,这些图像使用FirebaseStorage存储 我正在使用用户的唯一ID来命名照片。例如,用户的照片将被称为:userid_1.jpg、userid_2.jpg、userid_3.jpg 我使用第一张图片作为用户的个人资料图片。这一切都很好,但是我想允许用户删除照片并添加新照片 例如,用户有三张照片并删除了第一张,所以现在photo2移动到photo1的点,photo3拍摄photo2的点。因此,我

我正在使用Firebase在Android上制作一个社交应用程序。每个用户最多可以上载三个图像,这些图像使用FirebaseStorage存储

我正在使用用户的唯一ID来命名照片。例如,用户的照片将被称为:userid_1.jpg、userid_2.jpg、userid_3.jpg

我使用第一张图片作为用户的个人资料图片。这一切都很好,但是我想允许用户删除照片并添加新照片

例如,用户有三张照片并删除了第一张,所以现在photo2移动到photo1的点,photo3拍摄photo2的点。因此,我可以在活动中轻松获得这种效果:

photo1ImageView.setImageDrawable(photo2ImageView.getDrawable());
photo2ImageView.setImageDrawable(photo3ImageView.getDrawable());
photo3ImageView.setImageResource(R.drawable.addphotoicon);
但现在的问题是如何在FirebaseStorage中处理此问题。很明显,我从删除图片开始

FirebaseStorage.getInstance().getReference().child("images").child(userID + "_1.jpg").delete();
然后我想做的是重命名剩下的两张图片

所以在删除photo1之后,userid_1.jpg消失,userid_2.jpg变成userid_1.jpg,userid_3.jpg变成userid_2.jpg

但无法重命名FirebaseStorage中的文件。现在,当下次加载此活动时,它将把photo2放在第二个ImageView中,把photo3放在第三个ImageView中,第一个ImageView留空。配置文件图片(userid_1.jpg)也将丢失。这不是我想要的行为

我想到的另一种方法是:每当删除一张照片时,我都会删除所有用户的照片,并用正确的名称重新上传其余的照片,但这在Firebase上是非常低效和不必要的使用


我只是想知道是否有人能想出一个有效的方法来做到这一点

云存储并不擅长维护上传到它的对象序列。即使是最普通的计算机文件系统也不适合这样做


我建议放弃存储将维护任何种类的顺序或顺序的想法,并将该逻辑完全移动到数据库或其他数据存储中,从而使您能够轻松地在其中排序项目。上传到存储器的文件名可以是随机的,它们不需要任何含义。您只需将它们的路径存储在数据库中的相关记录中,并使两者保持同步。

您可以在这里应用一些技巧。
将用户照片引用作为对象数组存储到数据库中。为照片创建模型类。可以是这样的:

class UserPhoto {
    var photoRef: String? = null //Reference of your photo in Cloud Storage
    var downloadUrl: String? = null //This is optional, but very handy.
    var timestamp: Long? = null // In milseconds
    var order: Int = -1
}
在这里你可以看到“时间戳”和“顺序”是确定照片是否是最新照片的关键。只需将此数据作为数组存储在用户文档中。每张照片都有这些数据。然后,您可以根据每个用户照片的此数据模型将逻辑放入应用程序/服务器中