gpt4 book ai didi

java - Firebase:处理 setValue 失败

转载 作者:行者123 更新时间:2023-11-30 00:02:26 25 4
gpt4 key购买 nike

在我的 android 应用程序中,我使用 Firebase 来存储一些用户信息。我将用户的 username 存储在 3 个不同的地方。我的应用程序中有这个选项,我允许用户更新他们的 username。我想知道在所有这 3 个地方更新 username 的最可靠方法。

我的做法是:

-- 原地更新 1. 如果成功,则原地更新 2. 如果成功,则原地更新 3. 如果成功,那么一切都很好。 username 在所有 3 个地方都已成功更新。

但是我将如何处理这样的场景:

-- 尝试原地更新 1.假设成功了,然后我尝试原地更新 2.假设也成功了,然后我尝试原地更新 3.假设它更新失败在位置3。此时,我已经更新了位置1和位置2的用户名,但没有更新位置3。

如果用户的手机在 Firebase 尝试更新时断开与 Wifi 的连接,就会发生这种情况。如果发生这种情况,我想以适当的方式处理它。以下是有关我如何执行此操作的一些引用代码:

placeOneReference.child(key).setValue(newUsername)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
placeTwoReference.child(key).setValue(newUsername)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
placeThreeReference.child(key).setValue(newUsername)
.addOnCompleteListener(new OnCompleteListener<Void>() {
@Override
public void onComplete(@NonNull Task<Void> task) {
if (task.isSuccessful()) {
// Everything is successful
}
}
});
}
}
});
}
});

最佳答案

您应该在此 case 中使用多路径更新.这样您就不会级联请求,而是让 firebase 在一个“原子”更新函数中处理它们。

    Map<String, Object> value = new HashMap<>();
value.put("username", username);

Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/path1/" + key, value);
childUpdates.put("/path2/" + key, value);
childUpdates.put("/path3/" + key, value);



mDatabase.updateChildren(childUpdates);

如果您想在完成或发生其他任何事情(错误)时收到通知,您甚至可以添加一个 onComplete 监听器来更新子项。

mDatabase.updateChildren(childUpdates, new DatabaseReference.CompletionListener() {
@Override
public void onComplete(DatabaseError databaseError, DatabaseReference databaseReference) {

}
});

关于java - Firebase:处理 setValue 失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49672844/

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