Aan de slag met Realm voor Android

Invoering

Als je de laatste trends op het gebied van Android-ontwikkeling hebt bijgehouden, heb je waarschijnlijk van Realm gehoord. Realm is een lichtgewicht database die zowel SQLite- als ORM-bibliotheken in uw Android-projecten kan vervangen.

In vergelijking met SQLite is Realm sneller en heeft het veel moderne functies, zoals JSON-ondersteuning, een vloeiende API, meldingen over gegevenswijzigingen en coderingsondersteuning, die het leven gemakkelijker maken voor Android-ontwikkelaars.

In deze snelle tip leer je de basisprincipes van Realm voor Android. In deze tutorial zal ik gebruiken Realm v0.84.1.

1. Realm aan een project toevoegen

Als u Realm in een Android-project wilt gebruiken, moet u het als een compileren afhankelijkheid in de app module build.gradle het dossier.

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

2. Een rijk creëren

Een realm is vergelijkbaar met een SQLite-database. Er is een bestand aan gekoppeld dat, eenmaal gemaakt, blijft bestaan ​​in het bestandssysteem van Android.

Als u een nieuwe realm wilt maken, kunt u de static bellen Realm.getInstance methode van binnenuit Activiteit.

java Realm myRealm = Realm.getInstance (context);

Let op dat u belt Realm.getInstance, zonder een te passeren RealmConfiguration ernaar, resulteert in de oprichting van een Realm-bestand genaamd default.realm.

Als u nog een realm aan uw app wilt toevoegen, moet u a. Gebruiken RealmConfiguration.Builder object en geef het Realm-bestand een unieke naam.

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

3. Creëren van een RealmObject

Elke JavaBean kan worden opgeslagen in een Realm zodra deze wordt uitgebreid RealmObject klasse. Als je je afvraagt ​​wat een JavaBean is, is het gewoon een Java-klasse die serialiseerbaar is, een standaardconstructor heeft en getter / setter-methoden heeft voor de lidvariabelen. Bijvoorbeeld, instanties van de volgende klasse kunnen eenvoudig worden opgeslagen in een realm:

"java public class Land verlengt RealmObject

privé String naam; particuliere int populatie; public Country ()  public String getName () retournaam;  public void setName (String name) this.name = name;  public int getPopulation () return population;  public void setPopulation (int population) this.population = population;  

"

Als u een ledvariabele van een RealmObject als primaire sleutel kunt u de @Hoofdsleutel annotatie. Hier ziet u bijvoorbeeld hoe u een primaire sleutel met de naam zou toevoegen code naar de land klasse:

"java @PrimaryKey private String-code;

public String getCode () retourcode;

public void setCode (String code) this.code = code; "

4. Transacties aanmaken

Hoewel het lezen van gegevens uit een rijk heel eenvoudig is, zoals je in de volgende stap zult zien, is het schrijven van gegevens er iets complexer op. Realm voldoet aan de ACID-norm en om atomiciteit en consistentie te verzekeren, dwingt Realm u alle schrijfbewerkingen in een transactie uit te voeren.

Gebruik de. Om een ​​nieuwe transactie te starten beginTransaction methode. Evenzo, gebruik de. Om de transactie te beëindigen commitTransaction methode.

Hier ziet u hoe u een exemplaar van de. Kunt maken en opslaan land klasse:

"java myRealm.beginTransaction ();

// Maak een object Land country1 = myRealm.createObject (Country.class); // Stel de velden in country1.setName ("Noorwegen"); country1.setPopulation (5.165.800); country1.setCode ( "NO"); 

myRealm.commitTransaction ();"

Je hebt dat misschien gemerkt country1 is niet gemaakt met behulp van de constructor van de land klasse. Voor een realm om een ​​instantie van een te beheren RealmObject, het exemplaar moet worden gemaakt met behulp van de CreateObject methode.

Als u de constructor moet gebruiken, vergeet dan niet om de copyToRealm methode van de relevante Rijk object voordat u de transactie vastlegt. Hier is een voorbeeld:

"java // Maak het object Land land2 = nieuw Land (); land2.setName (" Rusland "); country2.setPopulation (146430430); country2.setCode (" RU ");

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

5. Query's schrijven

Realm biedt een zeer intuïtieve en vloeiende API voor het maken van query's. Gebruik de. Om een ​​query te maken waar methode van de relevante Rijk object en geef de klasse door van de objecten waarin u bent geïnteresseerd. Nadat u de query hebt gemaakt, kunt u alle resultaten ophalen met behulp van de vind alle methode, die a retourneert RealmResults voorwerp. In het volgende voorbeeld worden alle objecten van het type opgehaald en afgedrukt land:

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

for (Land c: results1) Log.d ("results1", c.getName ());

// Prints Noorwegen, Rusland "

Realm biedt verschillende toepasselijke methoden, zoals begint met, eindigt met, minder dan en groter dan, u kunt gebruiken om de resultaten te filteren. De volgende code laat zien hoe u de kunt gebruiken groter dan methode om alleen die te halen land objecten waarvan bevolking is groter dan 100 miljoen:

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

// Krijgt alleen Rusland "

Als u wilt dat de resultaten van de query worden gesorteerd, kunt u de findAllSorted methode. Als zijn argumenten duurt het een Draad specificeren van de naam van het veld om te sorteren op en een boolean de sorteervolgorde opgeven.

"java // Sorteer op naam, in aflopende volgorde RealmResults results3 = myRealm.where (Country.class) .findAllSorted ("name", false);

// Krijgt Rusland, Noorwegen "

Conclusie

In deze snelle tip hebt u geleerd hoe u Realm in een Android-project kunt gebruiken. U zag hoe gemakkelijk het is om een ​​Realm-database te maken, gegevens erin op te slaan en ernaar te vragen. Voor meer informatie over Realm voor Android, kunt u de Java-documentatie doornemen.