Android 数据库错误:事务被后续设置“如何解决”覆盖
我知道这是一个常见的错误,所以有很多线程。但什么都帮不了我 我的问题是: 我的数据库结构: 根 /职位/ /用户帖子/用户ID/ 每个帖子都有几个属性,包括: 利克蒙特 likes>id:true 无论何时创建帖子,它都存储在/posts/和/user posts/节点中。但当我喜欢这篇文章时,它会在一篇文章中更新,在另一篇文章中失败,出现问题标题中提到的错误 用于在firebase DB中插入帖子的代码:Android 数据库错误:事务被后续设置“如何解决”覆盖,android,firebase,firebase-realtime-database,Android,Firebase,Firebase Realtime Database,我知道这是一个常见的错误,所以有很多线程。但什么都帮不了我 我的问题是: 我的数据库结构: 根 /职位/ /用户帖子/用户ID/ 每个帖子都有几个属性,包括: 利克蒙特 likes>id:true 无论何时创建帖子,它都存储在/posts/和/user posts/节点中。但当我喜欢这篇文章时,它会在一篇文章中更新,在另一篇文章中失败,出现问题标题中提到的错误 用于在firebase DB中插入帖子的代码: Map<String, Object> childUpdates = new
Map<String, Object> childUpdates = new HashMap<>();
childUpdates.put("/posts/" + key, feedValues);
childUpdates.put("/user-posts/" + userId + "/" + key, feedValues);
dbRef.updateChildren(childUpdates);
由于like计数需要在/user posts/和/posts/中更新,因此我使用相应的数据库引用调用上述方法两次
参数:
解决了以下解决方法的问题。不知道这是否是正确的方法,但希望从其他人那里知道是否有更好的解决方案 因为它只发生在第一次事务中,所以我尝试检查错误并再次重试第二次尝试中成功的相同操作
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "updateLikeInServer:onComplete: " + databaseError);
if (databaseError != null && databaseError.getCode() == DatabaseError.OVERRIDDEN_BY_SET) {
// Retry the same
updateLikeInServer(dbRef, userId);
}
}
上面的代码片段修复了我的问题。但如果可能的话,我很愿意听最好的答案。通过下面的解决方法解决了这个问题。不知道这是否是正确的方法,但希望从其他人那里知道是否有更好的解决方案 因为它只发生在第一次事务中,所以我尝试检查错误并再次重试第二次尝试中成功的相同操作
@Override
public void onComplete(DatabaseError databaseError, boolean b, DataSnapshot dataSnapshot) {
// Transaction completed
Log.d(TAG, "updateLikeInServer:onComplete: " + databaseError);
if (databaseError != null && databaseError.getCode() == DatabaseError.OVERRIDDEN_BY_SET) {
// Retry the same
updateLikeInServer(dbRef, userId);
}
}
上面的代码片段修复了我的问题。但如果可能的话,我愿意听最好的答案。就我而言。我已经在我的手机上注册了2个谷歌账户。然后我在我的应用程序中切换了帐户,然后这个错误开始出现在我的一个计数器上(也使用事务)。但是你打两次电话的方法奏效了。奇怪的事情,对吧?它很奇怪,而且对我来说似乎是个虫子。可能会由Firebase团队澄清。就我而言。我已经在我的手机上注册了2个谷歌账户。然后我在我的应用程序中切换了帐户,然后这个错误开始出现在我的一个计数器上(也使用事务)。但是你打两次电话的方法奏效了。奇怪的事情,对吧?它很奇怪,而且对我来说似乎是个虫子。可能会被Firebase小组澄清。我不知道是谁干的。但可能会喜欢听更好的解决方案。因为,我知道这不是一个好的解决方案,我仍然在寻找正确的解决方案。我不知道是谁提出的。但可能会喜欢听更好的解决方案。因为,我知道这不是一个好的解决方案,我仍然在寻找正确的解决方案。