我正在使用 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 中的文件。所以現在當這個 Activity 下次加載時,它會將 photo2 放入第二個 ImageView 中,將 photo3 放入第三個 ImageView 中,將第一個 ImageView 留空。個人資料圖片 (userid_1.jpg) 也會丟失。這不是我想要的行為。我想到的另一種方法是:每當刪除照片時,我都會刪除所有用戶的照片,并以正確的名稱重新上傳剩余的照片,但這在 Firebase 上效率非常低且不必要。我只是想知道是否有人能想出一種有效的方法來做到這一點。
2 回答

米脂
TA貢獻1836條經驗 獲得超3個贊
云存儲不太擅長維護上傳到其中的對象的順序。即使是大多數普通的計算機文件系統也無法做到這一點。
我建議放棄存儲將維護任何類型的順序或順序的想法,并將該邏輯完全移至數據庫或其他數據存儲中,這確實使您能夠輕松地訂購其中的項目。上傳到存儲的文件的名稱可以是隨機的 - 它們不需要任何含義。您只需要將它們的路徑存儲在數據庫的相關記錄中,并保持兩者同步即可。

呼如林
TA貢獻1798條經驗 獲得超3個贊
你可以在這里應用一個小技巧。
將您的用戶照片參考作為對象數組存儲到數據庫中。為您的照片創建一個模型類??梢允沁@樣的:
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
}
這里你可以看到“時間戳”和“順序”是判斷照片是否是最新的關鍵。只需將此數據作為數組存儲在用戶文檔中即可。每張照片都會有這個數據。然后,您可以根據每個用戶照片的此數據模型將邏輯放入應用程序/服務器中。
添加回答
舉報
0/150
提交
取消