gpt4 book ai didi

java - Firebase:从存储和数据库中删除时,存储删除应该在存储删除的 onSuccessListener 中吗?

转载 作者:太空宇宙 更新时间:2023-11-03 11:32:42 25 4
gpt4 key购买 nike

假设我想从 Firebase 存储中删除一个条目以及从 Firebase 数据库中删除元数据。然后我应该像这样彼此独立地删除它们吗:

@Override
public void onDeleteClick(int position) {
Upload selectedItem = mUploads.get(position);
String selectedKey = selectedItem.getKey();

StorageReference imageRef = FirebaseStorage.getInstance().getReferenceFromUrl(selectedItem.getImageUrl());
imageRef.delete();

mDatabaseRef.child(selectedKey).removeValue();
}

还是把数据库删除部分放在存储删除方法的onSuccessListener中?

@Override
public void onDeleteClick(int position) {
Upload selectedItem = mUploads.get(position);
final String selectedKey = selectedItem.getKey();

StorageReference imageRef = FirebaseStorage.getInstance().getReferenceFromUrl(selectedItem.getImageUrl());
imageRef.delete().addOnSuccessListener(new OnSuccessListener<Void>() {
@Override
public void onSuccess(Void aVoid) {
mDatabaseRef.child(selectedKey).removeValue();
}
});

mDatabaseRef.child(selectedKey).removeValue();
}

最佳答案

每当您需要删除一个项目和跨多个服务的引用时,您就有可能一个操作完成而另一个操作失败。这导致数据损坏,因此您需要弄清楚什么对您的应用危害最小:

  1. 有一个孤立的图像,没有数据库节点引用它。
  2. 具有指向不再存在的图像的数据库属性。

如果孤立图像对您的应用危害较小,请先删除数据库节点,然后在完成处理程序中删除图像。这是我的首选,因为我的客户端应用程序代码不需要对孤立图像进行任何特殊处理。

如果数据库中有一个悬垂引用危害最小,请先删除该文件,然后按照 Peter 的回答更新数据库。

无论您选择哪个选项,您通常都希望定期运行一个维护过程来清理数据库中的悬空引用和/或存储中的孤立文件。

关于java - Firebase:从存储和数据库中删除时,存储删除应该在存储删除的 onSuccessListener 中吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527169/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com