Up and Running avec Realm pour Android

introduction

Si vous avez suivi les dernières tendances en matière de développement Android, vous avez probablement entendu parler de Realm. Realm est une base de données légère pouvant remplacer les bibliothèques SQLite et ORM dans vos projets Android..

Par rapport à SQLite, Realm est plus rapide et offre de nombreuses fonctionnalités modernes, telles que la prise en charge de JSON, une API fluide, les notifications de modification de données et la prise en charge du chiffrement, facilitant ainsi la vie des développeurs Android..

Dans cette astuce, vous allez apprendre les bases de Realm for Android. Dans ce tutoriel, je vais utiliser Domaine v0.84.1.

1. Ajouter un royaume à un projet

Pour utiliser Realm dans un projet Android, vous devez l’ajouter en tant que compiler dépendance dans le app modules build.gradle fichier.

groovy compile 'io.realm: realm-android: 0.84.1'

2. Créer un royaume

Un royaume est similaire à une base de données SQLite. Il est associé à un fichier qui, une fois créé, persistera dans le système de fichiers d'Android..

Pour créer un nouveau royaume, vous pouvez appeler le statique Realm.getInstance méthode de l'intérieur de tout Activité.

java Realm myRealm = Realm.getInstance (context);

Notez que l'appelant Realm.getInstance, sans passer un Configuration du domaine entraîne la création d’un fichier de domaine appelé default.realm.

Si vous souhaitez ajouter un autre royaume à votre application, vous devez utiliser un RealmConfiguration.Builder objet et donnez un nom unique au fichier de royaume.

java Realm myOtherRealm = Realm.getInstance (new RealmConfiguration.Builder (context) .name ("myOtherRealm.realm") .build ());

3. Créer un RealmObject

Tout JavaBean peut être stocké dans un royaume une fois qu'il étend la RealmObject classe. Si vous vous demandez ce qu'est un JavaBean, il s'agit simplement d'une classe Java sérialisable, dotée d'un constructeur par défaut et de méthodes getter / setter pour ses variables membres. Par exemple, les instances de la classe suivante peuvent être facilement stockées dans un royaume:

"Classe publique java Pays étend RealmObject

nom de chaîne privé; privé int population; public Country ()  public String getName () nom de retour;  public void setName (Nom de chaîne) this.name = name;  public int getPopulation () population de retour;  public void setPopulation (int population) this.population = population;  

"

Si vous voulez utiliser une variable membre d'un RealmObject en tant que clé primaire, vous pouvez utiliser le @Clé primaire annotation. Par exemple, voici comment ajouter une clé primaire appelée code au Pays classe:

"java @PrimaryKey private String code;

public String getCode () code retour;

public void setCode (Code de chaîne) this.code = code; "

4. Création de transactions

Bien que la lecture des données d'un royaume soit très simple, comme vous le verrez à l'étape suivante, l'écriture de données sur celui-ci est légèrement plus complexe. Realm est conforme à ACID et pour assurer la cohérence et l'atomicité, Realm vous oblige à exécuter toutes les opérations d'écriture dans une transaction..

Pour commencer une nouvelle transaction, utilisez le bouton beginTransaction méthode. De même, pour mettre fin à la transaction, utilisez le commitTransaction méthode.

Voici comment créer et sauvegarder une instance de Pays classe:

"java myRealm.beginTransaction ();

// Créer un objet Pays pays1 = myRealm.createObject (Country.class); // Définit ses champs pays1.setName ("Norvège"); country1.setPopulation (5165800); country1.setCode ("NO"); 

myRealm.commitTransaction (); "

Vous avez peut-être remarqué que pays1 n'a pas été créé en utilisant le constructeur de la Pays classe. Pour qu'un royaume gère une instance d'un RealmObject, l'instance doit être créée à l'aide du createObject méthode.

Si vous devez utiliser le constructeur, n'oubliez pas d'utiliser le copyToRealm méthode de la Domaine objet avant de valider la transaction. Voici un exemple:

"java // Créer l'objet Pays Pays2 = nouveau Pays (); pays2.setName (“ Russie ”); pays2.setPopulation (146430430); pays2.setCode (“ RU ”);

myRealm.beginTransaction (); Pays copyOfCountry2 = myRealm.copyToRealm (country2); myRealm.commitTransaction (); "

5. Écrire des requêtes

Realm propose une API très intuitive et fluide pour la création de requêtes. Pour créer une requête, utilisez le méthode de la Domaine objet et passez la classe des objets qui vous intéressent. Après avoir créé la requête, vous pouvez extraire tous les résultats à l'aide de la Trouver tout méthode, qui retourne un DomaineRésultats objet. Dans l'exemple suivant, nous récupérons et imprimons tous les objets de type Pays:

"java realmResults results1 = myRealm.where (Country.class) .findAll ();

pour (pays c: résultats1) log.d («résultats1», c.getName ());

// Imprime la Norvège, la Russie "

Realm propose plusieurs méthodes bien nommées, telles que commence par, se termine par, moins que et plus grand que, vous pouvez utiliser pour filtrer les résultats. Le code suivant vous montre comment utiliser le plus grand que méthode pour ne chercher que ceux Pays objets dont population est supérieur à 100 millions:

"java realmResults results2 = myRealm.where (Country.class) .greaterThan ("population", 100000000) .findAll ();

// Obtient seulement la Russie "

Si vous souhaitez que les résultats de la requête soient triés, vous pouvez utiliser le findAllSorted méthode. Comme arguments, il faut un Chaîne en spécifiant le nom du champ à trier et un booléen spécifiant l'ordre de tri.

"java // Tri par nom, par ordre décroissant RealmResults results3 = myRealm.where (Country.class) .findAllSorted ("name", false);

// Obtient la Russie et la Norvège "

Conclusion

Dans cette astuce, vous avez appris à utiliser Realm dans un projet Android. Vous avez constaté à quel point il est facile de créer une base de données Realm, d'y stocker des données et de l'interroger. Pour en savoir plus sur Realm for Android, vous pouvez consulter sa documentation Java..