kotlin 自动生成id ROOM数据库的问题

x8diyxa7  于 2023-05-01  发布在  Kotlin
关注(0)|答案(1)|浏览(185)

我想添加一个比赛,以指定比赛的比赛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

az31mfrm

az31mfrm1#

自动生成与此无关。(旁注,你可能想看看它的意思,因为这个名字超级误导,在大多数情况下应该关闭它。ID在关闭时仍然会自动生成-只是不能保证它们不是曾经属于已删除的行的数字。)
通过浏览您的代码,我看到您传递给此函数的Tournament的默认ID为0,这意味着当项目插入数据库时,SQLite将为其生成一个ID。这很好,但是您永远不会执行任何操作来检索生成的ID。您只需继续使用具有id 0的原始锦标赛示例。
如果您想轻松地检索刚刚插入的行的ID,请将DAO插入函数更改为返回类型Long。返回的Long是插入的行的ID。

相关问题