web-dev-qa-db-fra.com

Android Room - Clé primaire générée automatiquement

Je rencontre un problème pour lequel je ne trouve aucune documentation avec Room for Android et la génération automatique de la clé primaire.

J'ai une classe d'entité qui ressemble un peu à ceci:

@Entity
public class Preference {

    @PrimaryKey(autoGenerate = true)
    private int id;

    public void setId(int id) {

        this.id = id;

    }

}

Cela fonctionne bien lorsque j'ai défini l'ID manuellement, mais lorsque je ne définis pas la clé primaire, j'obtiens une erreur concernant la clé primaire étant nulle. En regardant le fichier généré automatiquement, je ne vois nulle part qu'il incrémenterait automatiquement la clé primaire.

Je suppose donc que ma question est la suivante: pouvez-vous générer automatiquement une clé primaire d'un membre privé avec un setter ou aurais-je besoin de générer automatiquement ma clé manuellement dans le setter?

11
James Lendrem

D'accord, donc ce code ne générera pas le membre id car le membre est nul, je dois soit le définir comme un objet Integer, auquel cas il générera automatiquement un nouvel identifiant lorsque le membre est égal à null, ou, j'ai besoin pour le mettre égal à 0 lors de l'initialisation de l'objet qui fera de même.

Je l'ai défini sur un entier qui résout parfaitement mon problème.

@Entity
public class Preference {

    @PrimaryKey(autoGenerate = true)
    private Integer id;

    public void setId(Integer id) {

        this.id = id;

    }

}
9
James Lendrem