我想添加一个比赛,以指定比赛的比赛id一切都是正确的,除了 www.example.com ()中的com始终为0。
我认为这个问题的原因是因为Tournament数据类中的一个id被设置为autogenerate=true。如何将正确的锦标赛ID设置为SingleMatch数据
**我的尝试:**是ViewModel文件。当用户点击“添加锦标赛”时,我调用addTournament函数。
fun addTournament(tournament: Tournament) {
viewModelScope.launch(Dispatchers.IO) {
repository.insertTournament(tournament)
generateMatchesFFA(tournament)
}
}
private suspend fun generateMatchesFFA(tournament: Tournament) {
val listOfPlayers = tournament.players
.trim('[', ']')
.split(", ")
.map {
it.trim('"')
}
val size = listOfPlayers.size
for (i in 0 until size) {
for (j in i+1 until size) {
singleMatchRepository.insertMatch(SingleMatch(
player1 = listOfPlayers[i],
player2 = listOfPlayers[j],
tournamentId = tournament.id
))
}
}
}
我还留下了github项目的链接:https://github.com/DawidSiudeja/Tournament/tree/master/app/src/main/java/com/example/tournamentapp
1条答案
按热度按时间az31mfrm1#
自动生成与此无关。(旁注,你可能想看看它的意思,因为这个名字超级误导,在大多数情况下应该关闭它。ID在关闭时仍然会自动生成-只是不能保证它们不是曾经属于已删除的行的数字。)
通过浏览您的代码,我看到您传递给此函数的Tournament的默认ID为0,这意味着当项目插入数据库时,SQLite将为其生成一个ID。这很好,但是您永远不会执行任何操作来检索生成的ID。您只需继续使用具有
id
0的原始锦标赛示例。如果您想轻松地检索刚刚插入的行的ID,请将DAO插入函数更改为返回类型Long。返回的Long是插入的行的ID。