1
votes

Ignorer null à l'aide de l'annotation @Insert avec Android Room

J'utilise un DAO pour insérer un tableau d'objets (par exemple User []) dans une table Room:

@Insert(onConflict = OnConflictStrategy.REPLACE)
void insertAll(User... user);

Cependant, il est possible que certains objets dans User [] soient nuls. Dans ce cas, la méthode insertAll () lève une exception NullPointerException.

Est-il possible de sauter d'une manière ou d'une autre les valeurs nulles? Je préférerais utiliser l'annotation @Insert au lieu d'écrire une requête d'insertion personnalisée ou de filtrer les valeurs nulles au préalable.


2 commentaires

Pourquoi vous ne voulez pas filtrer les valeurs nulles au préalable?


Je demande essentiellement s'il y a quelque chose de déjà implémenté par Room pour ce cas


3 Réponses :


0
votes
  1. Créer un autre tableau du même type d'objet
  2. Appelez-le temp
  3. Parcourez le premier tableau
  4. Si l'élément [i] est nul, excluez-le de temp
  5. Passez temp comme argument de votre méthode

Quelqu'un ici connaît probablement une sorte de méthode définie par la bibliothèque pour faire ce que vous voulez faire, mais cette solution m'est venue à l'esprit en premier.


2 commentaires

Merci, le problème est que lors de l'initialisation d'un tableau du même type d'objet, vous devez déclarer au préalable la quantité d'objets qu'il contient.


J'ai oublié cela. J'essaierais une liste alors.



0
votes

J'espérais que Room aurait implémenté un utilitaire pour y parvenir, par exemple une annotation comme @Ignore (null) , mais il semble que ce ne soit pas le cas. Voici ma solution pour le moment:

Appel de la méthode ArrayUtils.removeAllOccurences (users, null) de org.apache.commons.lang3.ArrayUtils et utiliser le résultat comme argument pour insertAll () .


0 commentaires

0
votes

Essayez d'utiliser l'annotation de valeur par défaut pour les champs d'entité qui peuvent avoir une valeur nulle comme: @ColumnInfo (defaultValue = "CURRENT_TIMESTAMP")

Également pour les champs d'entité qui peuvent avoir des valeurs nulles, placez l'annotation @Nullable.


0 commentaires