Nullable che non funziona in insert

di il
1 risposte

Nullable che non funziona in insert

Ciao,
premetto che sono agli e questa é la prima volta che cerco di prendere dei dati da un API tramite retrofit e di inserirli nel sqlLite.

Ho creato tre classi
La principale Client principale e poi che é Civilite e Adresse che vengono usate in Client

Civilite potrebbe essere nullo
Inoltre Civilite ha sempre solo tre tipi di valore, quindi ha una relazione 1 a N


@Entity(tableName = "Civilite")
public class Civilite {

     private String idCivilite ;

     private  String intitule;


}
se creo la classe senza primarykey ricevo il messaggio

error: An entity must have at least 1 field annotated with @PrimaryKey
public class Civilite {

dunque per andare avanti e cercare di capire ho provato a mettere
 @PrimaryKey
 @NotNull
private String idCivilite ;

Quindi il primo problema e che non ho capito come creare nel db una tabella con questa relazione

Il secondo problema che non riesco a superare e che quando vado a scrivere nel db mi da eccezione e dice che Civilite é nulla e non puo creare Client
ma io ho impostato Civilite come Nullable



@Entity(tableName = "Contact")
public class Client {

    @PrimaryKey
    @NonNull
    private String id;

    private String numero;

    private String typeClient;

    @Nullable
    private String denomination;

    @Nullable
    private String nom;

    @Nullable
    private String prenom;

    @Nullable
    private String email;

    @TypeConverters(CiviliteTypeConverter.class)
    @Nullable
    private Civilite civilite;
}


nel mio codice per inserire i dati nel db ho scritto questo


var civilite: Civilite? = null


            if (_client.civilite != null) {
                 civilite = Civilite(
                    _client.civilite.idCivilite,
                    _client.civilite.intitule
                )
            }

            var client = Client(
                _client.id,
                _client.numero,
                _client.typeClient,
                _client.denomination,
                _client.nom,
                _client.prenom,
                _client.email,
                civilite,
                adresse,
                dateNaissance,
                etatMarital
            )


if (civilite != null) {
                        myAppDatabase.myDao().addUser(client)
                        myAppDatabase.myDao().addAdresse(adresse)
                        if (civilite != null) {
                            myAppDatabase.myDao().addCivilite(civilite)
                        }
                    }
sono certo che il problema é sulla civilite perché se riempio con dei dati fissi Civilite e dunque non é null tutto viene inserito correttamente


L'eccezione che ricevo su myAppDatabase.myDao().addUser(client)
é questa

Parameter specified as non-null is null: method kotlin.jvm.internal.Intrinsics.checkParameterIsNotNull, parameter value

Potete cortesemente aiutarmi ed indicarmi cosa sto sbagliando?
Grazie

1 Risposte

  • Re: Nullable che non funziona in insert

    Premesso che non conosco Kotlin, quello che vedo è che hai una Entity con una Primary Key, che però non viene valorizzata da nessuna parte (almeno per quel che ne posso capire).

    Tu dici "ho impostato Civilite come nullable"... no: hai impostato alcuni suoi campi come nullable... la primary key di sicuro non può essere null (per definizione di chiave primaria!) quindi quando vai a fare l'inserimento la devi valorizzare (se deve farlo il DB devi dirglielo: come, in kotlin, non lo so...) e credo che il problema sia proprio lì: cerchi di inserire a DB una entity con chiave primaria nulla.

    My 2 cents.
Devi accedere o registrarti per scrivere nel forum
1 risposte