J'ai mis à jour la chambre de 2.2.6 à 2.3.0 et j'ai commencé à voir des erreurs étranges dans le code Java compilé / généré à l'heure de la compilation. Je ne vois aucune erreur dans mes fichiers .kt ou dans les fichiers générés .java dans le répertoire ...build/tmp/kapt3/stubs/debug/... Je ne vois que l'erreur de compilation qui enfreint la construction.

L'erreur complète que je reçois:

error: You must annotate primary keys with @NonNull. "version" is nullable. SQLite considers this a bug and Room does not allow it. See SQLite docs for details: https://www.sqlite.org/lang_createtable.html
    private java.lang.Integer version;

Quand je regarde le code généré .java, je vois qu'il l'annotant:

@org.jetbrains.annotations.Nullable()
@androidx.annotation.NonNull()
private java.lang.Integer version;

Mon code Kotlin est également annoté:

import androidx.annotation.NonNull
...
    @NonNull
    var version: Int? = null

Mon code a fonctionné bien et est bien testé et prouvé travailler à l'aide de la chambre 2.2.6. J'ai seulement commencé à avoir ce problème après la mise à jour de la chambre 2.3.0.

Vieilles dépendances.Gradle

implementation "androidx.room:room-runtime:2.2.6"
kapt "androidx.room:room-compiler:2.2.6"

Dépendances mises à jour.Gradle

implementation "androidx.room:room-runtime:2.3.0"
kapt "androidx.room:room-compiler:2.3.0"

Toute aide est la bienvenue, merci!

1
Tim 4 mai 2021 à 00:45

1 réponse

Meilleure réponse

Kotlin n'utilise pas @NonNull annotations - qui est déterminée par votre type lui-même, qui est dans votre cas une nullable Int?.

Vous aurez besoin de le changer à un Int et d'assigner une valeur par défaut (c'est-à-dire -1).

3
ianhanniballake 3 mai 2021 à 21:53