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.
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'
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 ());
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; "
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 ();"
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
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
// 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
// Krijgt Rusland, Noorwegen "
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.