Kotlin Firebase读写并发性
当两个人同时试图将对方添加到朋友中时,我遇到了问题。因此,首先,当一个人按下“添加到朋友”按钮时,他会检查其他用户的组是否没有我的ID。如果他有,我不需要创建新组-我只需将此组的ID添加到我的列表中,否则-我将创建新组。现在,当两个人同时按下该按钮时,他们都会得到一个结果,即组不存在,因此他们都创建了一个新组。如何解决这些问题 结构:Kotlin Firebase读写并发性,kotlin,firebase-realtime-database,Kotlin,Firebase Realtime Database,当两个人同时试图将对方添加到朋友中时,我遇到了问题。因此,首先,当一个人按下“添加到朋友”按钮时,他会检查其他用户的组是否没有我的ID。如果他有,我不需要创建新组-我只需将此组的ID添加到我的列表中,否则-我将创建新组。现在,当两个人同时按下该按钮时,他们都会得到一个结果,即组不存在,因此他们都创建了一个新组。如何解决这些问题 结构: "userGroups" : { "myId1" : { "generatedGr
"userGroups" : {
"myId1" : {
"generatedGroupId1" : "myFriendID1"
}
}
更新:我已经设法做到了:基本上在doTransaction
中,我创建了一个不存在的组,然后在onComplete
中,我使用已经创建的组。如果两个人开始创建新的组,一个人最终创建它,另一个人-阅读它
// function
ref.runTransaction(object : Transaction.Handler {
override fun doTransaction(currentData: MutableData): Transaction.Result {
// create group here if data is null
return Transaction.success(currentData)
}
override fun onComplete(
error: DatabaseError?,
committed: Boolean,
currentData: DataSnapshot?
) {
Log.d(TAG, "postTransaction:onComplete:" + error)
// continue doing stuff, group already exists at this point
}
})
}
在没有看到您的代码的情况下,很难给出具体的选项,但最有可能的选项是(按照我个人偏好的顺序):
我在使用事务时更新了我的代码(在帖子中)。现在两个用户都创建了新的组,但对于一个用户,事务再次运行,然后充当已经存在的组。我是否需要将这些更新返回到某个地方,或者如何防止这种情况发生?我不确定我是否理解你在那里说的话。最好打开一个新问题,清楚地再现您在交易中遇到的问题。