18/02/2021 1 ZEMALI Elamine Persistance de données Introduction Plusieurs supp

18/02/2021 1 ZEMALI Elamine Persistance de données Introduction Plusieurs support de stockage de données existent. Android et SqLite Room database 18/02/2021 2 Concept de base Avant d’aborder comment implémenter une base de données Room sous android : Architecture MVVM Model-View-ViewModel Theory MVVM signifie Model-View-ViewModel. MVVM est un modèle architectural dont le but principal est de parvenir à la séparation des préoccupations grâce à une distinction claire entre les rôles de chacune de ses couches: View affiche l’interface utilisateur et informe les autres couches sur les actions des utilisateurs. ViewModel expose les informations à la vue. Le modèle récupère les informations de votre source de données et les expose aux ViewModels. 18/02/2021 3 Différence entre MVVM ET MVC La principale différence entre MVVM et ces modèles est qu’il y a un fort accent que le ViewModel ne doit pas contenir de références aux vues. Le ViewModel ne fournit que des informations et il n’est pas intéressé par ce qui le consomme. Le modèle Connu sous le nom de DataModel. Il est chargé d’exposer les données pertinentes à vos ViewModels d’une manière facile à consommer. Il doit également recevoir tous les événements du ViewModel dont il a besoin pour créer, lire, mettre à jour ou supprimer toutes les données nécessaires du backend. 18/02/2021 4 Le modèle Dans Android, vous créez généralement des modèles en tant que classes de données, Une application qui affiche des informations sur les derniers films. Vous créeriez sûrement une classe de film qui contient des données telles que le titre, la description, l’heure et la date de sortie du film. ViewModel Le viewModel a comme mission : récupère les informations nécessaires à partir du modèle, applique les opérations nécessaires expose toutes les données pertinentes pour les vues. Traite le problème des données perdues lors d’une re- Creation. 18/02/2021 5 ViewModel survivre aux changements de configuration/cycle de vie comme les rotations d’écran. exposer les événements que les vues peuvent observer et réagir en conséquence La vue La vue est responsable de l’affichage de l’interface. elle est généralement représentée dans Android sous forme d’activités ou de fragments. Son rôle principal dans le modèle MVVM est d’observer un ou plusieurs ViewModels pour obtenir les informations nécessaires dont il a besoin et mettre à jour l’interface utilisateur en conséquence. 18/02/2021 6 La vue La vue informe également ViewModels sur les actions des utilisateurs. Les vues peuvent avoir une référence à un ou plusieurs ViewModels, mais ViewModels ne peut jamais avoir d’informations sur les vues. vous communiquerez généralement les données entre les vues et les viewmodels avec observables, en utilisant des bibliothèques telles que RxJava, LiveData ou DataBinding. Avantages de MVVM les tests unitaires deviennent très faciles car ils n’ont aucune référence aux vues. MVVM résout le problème de « ou mettre ce code » en fournissant une meilleure séparation des préoccupations. L’ajout de ViewModels, dont le but principal est d’être complètement séparé des vues, réduit le risque d’avoir trop de code dans les autres couches. 18/02/2021 7 Implémenter un viewmodel ViewModel est responsable de la préparation des données pour l’interface utilisateur. Les objets ViewModel sont automatiquement conservés lors des modifications de configuration afin que les données qu’ils détiennent soient immédiatement disponibles pour l’activité ou fragment. Implémenter un viewmodel Par exemple, public class MyViewModel extends ViewModel { private MutableLiveData<List<User>> users; public LiveData<List<User>> getUsers() { if (users == null) { users = new MutableLiveData<List<User>>(); loadUsers(); } return users; } private void loadUsers() { // Do an asynchronous operation to fetch users. } } 18/02/2021 8 Implémenter un viewmodel accéder à la liste public class MyActivity extends AppCompatActivity { public void onCreate(Bundle savedInstanceState) { // Create a ViewModel the first time the system calls an activity's onCreate() method. // Re-created activities receive the same MyViewModel instance created by the first activity. MyViewModel model = new ViewModelProvider(this).get(MyViewModel.class); model.getUsers().observe(this, users -> { // update UI }); } } Implémenter un viewmodel Attention : Un ViewModel ne doit jamais faire référence à une vue, à un cycle de vie ou à une classe qui peut contenir une référence au contexte d’activité. Si le ViewModel a besoin du contexte d’application, par exemple pour trouver un service système, il peut étendre la classe AndroidViewModel et avoir un constructeur qui reçoit l’application dans le constructeur, puisque la classe Application étend le contexte. Les objets ViewModel peuvent contenir lifecycleObservers, tels que les objets LiveData. 18/02/2021 9 LiveData LiveData est une classe observable de détenteurs de données. LiveData ne met à jour que les observateurs des composants de l’application qui sont en état de cycle de vie actif. LiveData considère qu’un observateur, qui est représenté par la classe Observer , est dans un état actif si son cycle de vie est dans l’état STARTED ou RESUMED. Cette relation permet à l’observateur d’être supprimé lorsque l’état de l’objet du cycle de vie correspondant se modifie en DESTROYED. Avantage de LiveData s’assure que votre interface utilisateur correspond à votre état de données. Aucune fuite de mémoire Aucun bug dû à l’arrêt des activités Modifications de configuration appropriées Partage de ressources 18/02/2021 10 Utiliser LiveData Suivez ces étapes pour travailler avec des objets LiveData : 1-Créez une instance de LiveData pour conserver un certain type de données. Cela se fait généralement dans votre classe ViewModel. 2-Créez un objet Observer qui définit la méthode onChanged() qui contrôle ce qui se passe lorsque les données détenues par l’objet LiveData changent. Vous créez généralement un objet Observe dans un contrôleur d’interface utilisateur, tel qu’une activité ou un fragment. 3-Attachez l’objet Observer à l’objet LiveData en utilisant la méthode observe() . La méthode observe () prend un objet LifecycleOwner. Cela souscrit à l’objet Observer à l’objet LiveData afin qu’il soit informé des modifications. Vous attachez généralement l’objet Observer dans un contrôleur d’interface utilisateur, comme une activité ou un fragment Etape 1 créer LiveData LiveData est un conteneur (wrapper) qui peut être utilisé avec n’importe quelle donnée, y compris les objets qui implémenter des collections, telles que List. Un objet LiveData est généralement stocké dans un objet ViewModel qui est accessible via une méthode getter 18/02/2021 11 Exemple : public class NameViewModel extends ViewModel { // Create a LiveData with a String private MutableLiveData<String> currentName; public MutableLiveData<String> getCurrentName() { if (currentName == null) { currentName = new MutableLiveData<String>(); } return currentName; } // Rest of the ViewModel... } Observe LiveData la méthode onCreate () est le bon endroit pour observer un objet LiveData. LiveData ne fournit des mises à jour que lorsque les données changent, et uniquement aux observateurs actifs. 18/02/2021 12 exemple: public class NameActivity extends AppCompatActivity { private NameViewModel model; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); model = new ViewModelProvider(this).get(NameViewModel.class); final Observer<String> nameObserver = new Observer<String>() { @Override public void onChanged(@Nullable final String newName) { nameTextView.setText(newName); } }; model.getCurrentName().observe(this, nameObserver); } } Update LiveData objects LiveData vs MutableLiveData LiveData n’a pas de méthodes accessibles au public pour mettre à jour les données stockées. La classe MutableLiveData expose publiquement les méthodes setValue(T) et postValue(T). 18/02/2021 13 Update LiveData objects Exemple button.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { String anotherName = "John Doe"; model.getCurrentName().setValue(anotherName); } }); Room database 18/02/2021 14 Room database Entité:lorsque vous travaillez avec des composants d'architecture, l'entité est une classe annotée qui décrit une table de base de données. Base de données SQLite:sur l'appareil, les données sont stockées dans une base de données SQLite. DAO:objet d'accès aux données. Un mappage des requêtes SQL aux fonctions, Dans l’utilisation standard de SQLite, l’utilisateur devait écrire toutes les requêtes en langage SQL (en appelant SQLiteOpenHelper). Lorsque vous utilisez un DAO, vous appelez les méthodes et les composants s'occupent du reste. Base de données room:couche de base de données au-dessus de la base de données SQLite qui prend en charge les tâches standards. Elle Fournit un stockage de données local plus facile. La base de données Room utilise le DAO pour envoyer des requêtes à la base de données SQLite. Room database Repository:classe que vous créez pour gérer plusieurs sources de données ViewModel :fournit des données à l'interface utilisateur et sert de centre de communication entre le Repository et l'interface utilisateur. Les instances deViewModel survivent aux modifications de configuration de l'appareil. LiveData :classe de détenteur de données qui suit le modèle d’observateur, ce qui signifie qu'il peut être observé. Le liveDate contient toujours en cache la dernière version des données et avertit ses observateurs lorsque les données sont modifiées. LiveData gère automatiquement l'arrêt et la reprise de l'observation, car il est au courant des changements d'état du cycle de vie pertinents. 18/02/2021 15 Implémentation 1 Importer les bibliothèques dans Fichiers Gradle 2 créer les entités avec annotations 3 Créer les DAO. 4 Créer la classe de la base de donnée Room 5 Créer le Repository. 6 Créer le ViewModel 7 Créer les Views Une entité est une classe qui représente une ligne dans la table; Par exemple, une personne, avec un identifiant unique, un prénom, un nom de famille, une adresse e-mail public class Person { private int uid; private String firstName; private String lastName; } 18/02/2021 16 Annotations uploads/Management/ persistance-de-donnees.pdf

  • 19
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager
  • Détails
  • Publié le Mar 26, 2022
  • Catégorie Management
  • Langue French
  • Taille du fichier 0.6966MB