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.
3 Réponses :
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.
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.
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 ()
.
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.
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