Voici comment j'insère des données dans la base de données à l'aide de la bibliothèque de persistance de la pièce:
Entité:
@Entity
class User {
@PrimaryKey(autoGenerate = true)
public int id;
//...
}
Objet d'accès aux données:
@Dao
public interface UserDao{
@Insert(onConflict = IGNORE)
void insertUser(User user);
//...
}
Est-il possible de renvoyer l'identifiant de l'utilisateur une fois l'insertion terminée dans la méthode ci-dessus elle-même sans écrire une requête de sélection séparée?
android
persistent-storage
android-room
SpiralDev
la source
la source
int
ou à lalong
place devoid
suite à l'@Insert
opération?aSyncTask
? comment renvoyez-vous la valeur de votre fonction de référentiel?Réponses:
Basé sur la documentation ici (ci-dessous l'extrait de code)
Une méthode annotée avec l'
@Insert
annotation peut renvoyer:la source
@Insert
fonction peut retournervoid
,long
,long[]
ouList<Long>
. Veuillez essayer ceci.la source
return Single.fromCallable(() -> dbService.YourDao().insert(mObject));
La valeur de retour de l'insertion pour un enregistrement sera 1 si votre instruction réussit.
Si vous souhaitez insérer une liste d'objets, vous pouvez utiliser:
Et exécutez-le avec Rx2:
la source
Obtenez l'ID de ligne à l'aide du sniplet suivant. Il utilise appelable sur un ExecutorService avec Future.
Réf: Tutoriel Java Executor Service pour plus d'informations sur Callable.
la source
Dans votre Dao, la requête d'insertion renvoie
Long
ie le rowId inséré.Dans votre classe Model (Repository): (MVVM)
Dans votre classe ModelView: (MVVM) Gérez LiveData avec DisposableSingleObserver.
Référence du fournisseur de travail: https://github.com/SupriyaNaveen/CookingRecipes
la source
Après beaucoup de difficultés, j'ai réussi à résoudre ce problème. Voici ma solution utilisant l' architecture MMVM:
Student.kt
StudentDao.kt
StudentRepository.kt
StudentViewModel.kt
Dans le fragment:
J'ai utilisé DataBinding, voici mon XML:
J'ai beaucoup de mal à accomplir cela avec asynctask car l'opération d'insertion et de suppression de pièce doit être effectuée dans un thread séparé. Enfin capable de le faire avec Single type observable dans RxJava.
Voici les dépendances Gradle pour rxjava:
la source
Selon la documentation, les fonctions annotées avec @Insert peuvent renvoyer le rowId.
Le problème que j'ai avec ceci est qu'il renvoie le rowId et non l'identifiant et je n'ai toujours pas trouvé comment obtenir l'identifiant en utilisant le rowId.
Malheureusement, je ne peux pas encore faire de commentaire, car je n'ai pas 50 réputation, donc je publie ceci comme une réponse à la place.
la source