6
votes

Vous devez annoter les clés primaires avec @NonNull?

J'obtiens cette erreur sur ce morceau de code. You must annotate primary keys with @NonNull. "uidString" is nullable. Lorsque je l'annote avec @NonNull et @PrimaryKey, An entity must have at least 1 field annotated with @PrimaryKey

Quoi de neuf?

import androidx.annotation.NonNull;
import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.PrimaryKey;

import java.util.UUID;

@Entity(tableName = "player_profiles")
public class PlayerGameProfile implements Parcelable {

    @PrimaryKey
    public String uidString = UUID.randomUUID().toString();

    @ColumnInfo(name = "name")
    public String name;


6 commentaires

When I annotate it with @NonNull, An entity must have at least 1 field annotated with @PrimaryKey avez-vous annoté avec les deux ou juste @NonNull ?


Ce dernier est avec les deux. J'étais fatigué de changer l'ordre aussi


Et assurez-vous d'importer le package NonNull correct: import android.support.annotation.NonNull;


Oui, désolé pour la pâte de code bâclée, tous sont présents. OP modifié


J'ai essayé ce que vous avez fait et je n'ai reçu aucune erreur de compilation ou de construction. Le problème est ailleurs et non avec les annotations. De plus, j'ai utilisé les annotations AndroidX et PAS les annotations de support


Avez-vous les dernières bibliothèques? selon Shankha507 fonctionne très bien (et a également essayé de permuter la position de @NonNull par rapport à @PrimaryKey). J'utilise l' implementation 'androidx.room:room-runtime:2.2.1' et annotationProcessor 'androidx.room:room-compiler:2.2.1' . J'ai rencontré ce qui semblait être le même problème avec les bibliothèques antérieures.


4 Réponses :


0
votes

Vous pouvez essayer de lier la clé primaire avec l'entité comme ceci:

@NonNull
public String uidString = UUID.randomUUID().toString();

Après cela, @NonNull votre clé primaire avec @NonNull dans la classe ci-dessous.

@Entity(tableName = "player_profiles",
        primaryKeys = { "uidString" })


2 commentaires

:( obtient toujours la deuxième erreur concernant au moins 1 clé primaire


Assurez-vous également d'essayer l'autre package d'importation pour NonNull mentionné dans mon commentaire à OP: import android.support.annotation.NonNull



2
votes

Pour Java, vous devez annoter avec @android.support.annotation.NonNull

Supprimez l'autre importation NonNull que vous utilisez encore et changez-la en

@PrimaryKey
@NonNull

Ensuite, utilisez les deux annotations

import android.support.annotation.NonNull;


0 commentaires

0
votes

vérifiez la sensibilité à la casse, il doit être "@NonNull" et non "@Nonnull" import androidx.annotation.NonNull;


1 commentaires

C'est en fait ce que dit le texte de la question.



0
votes

Dans mon cas, j'avais:

@PrimaryKey @NonNull var reasonId: String = Constants.EMPTY_STRING, 

au lieu de:

@PrimaryKey @NonNull var reasonId: String? = Constants.EMPTY_STRING, 


1 commentaires

Si vous écrivez kotlin, vous ne devriez pas avoir besoin de @NonNull condition d'utiliser le type non nullable