Bonjour à tous !
Je m'entraîne actuellement sur du développement Android via une petite application de liste de course. J'utilise le modèle MVVM avec une BDD (Room), un Repository, un viewModel et une activité qui affiche différents fragments.
J'ai deux tables distinctes, une pour les articles que je veux acheter (shopping_items) et une avec des articles de références pour connaitre le prix et la catégorie (reference_items). Lorsque j'ajoute un shopping item dans ma table, je lui lie, si possible, un refId correspondant au reference item du même nom (Unique). Ainsi, je peux trouver le prix et la catégorie sans avoir à copier toutes les données dans mon shopping item pour ne pas surcharger la table shopping_items.
Dans mon DAO j'ai donc la requête suivant:
1 2
| @Query(value = "SELECT refId FROM reference_items WHERE reference_item_name = :refName")
suspend fun getRefItem(refName : String) : Int |
Cela me renvoi un Int que correspond au reference item voulu ou bien 'null' si il n'est pas référencé.
dans mon Repository j'ai la ligne suivante qui appelle simplement la fonction:
suspend fun getRefItem(refName : String) = db.getShoppingDao().getRefItem(refName)
Jusque là, tout va bien, je ne pense pas me tromper. Les problèmes arrive ensuite.
Comment dois-je procéder pour l'implémentation dans le viewModel? et dans mon fragment?
Je sais que je peux utiliser LiveData, mais je ne pense pas que ce soit approprié dans mon cas. En effet, la requête est lancé une seul fois, un "One-Shot". Je n'ai pas besoin de données en continue.
Je voudrais simplement appeler ma fonction: addNewItem(name: String, amount: Int) dans mon fragment qui doit:
- Trouver l'item de référence grâce à name (Lancer la requête)
- Créer le nouveau shopping item
- Lancer la requête d'insertion dans la BDD
Merci pour votre aide
P.S: J'utilise Kotlin comme language. Si vous me donnez du Java cela va aussi, mais j'ai du mal avec le multithreading. Je suis plus à l'aise avec les Coroutine de Kotlin qui me semblent plus simple à aborder.
Partager