Om du har följt de senaste trenderna i Android-utveckling har du säkert hört talas om Realm. Realm är en lätt databas som kan ersätta både SQLite och ORM-bibliotek i dina Android-projekt.
Jämfört med SQLite är Realm snabbare och har massor av moderna funktioner, till exempel JSON-support, ett flytande API, dataförändringsanmälningar och krypteringsstöd, vilket gör livet enklare för Android-utvecklare.
I det här snabba tipset kommer du att lära dig grunderna i Realm for Android. I denna handledning kommer jag att använda Realm v0.84.1.
Om du vill använda Realm i ett Android-projekt måste du lägga till det som en sammanställa
beroendet i app modulens build.gradle fil.
groovy compile 'io.realm: realm-android: 0.84.1'
A Realm liknar en SQLite-databas. Den har en fil som är associerad med den, som, en gång skapad, kommer att fortsätta på Androids filsystem.
För att skapa en ny Realm kan du ringa den statiska Realm.getInstance
metod från insidan någon Aktivitet
.
java Realm myRealm = Realm.getInstance (context);
Observera att ringer Realm.getInstance
, utan att passera en RealmConfiguration
till det resulterar i skapandet av en Realm-fil som heter default.realm.
Om du vill lägga till en annan Realm i din app måste du använda en RealmConfiguration.Builder
objekt och ge Realm-filen ett unikt namn.
java Realm myOtherRealm = Realm.getInstance (nytt RealmConfiguration.Builder (context) .name ("myOtherRealm.realm") .build ());
RealmObject
Alla JavaBean kan lagras i ett Realm när det sträcker sig RealmObject
klass. Om du undrar vad JavaBean är, är det helt enkelt en Java-klass som är serialiserbar, har en standardkonstruktor och har getter / setter-metoder för dess medlemsvariabler. Exempelvis kan instanser av följande klass enkelt lagras i en Realm:
"java public class Country utökar RealmObject
privat strängnamn; privat int befolkning; offentligt land () public String getName () returnamn; public void setName (strängnamn) this.name = name; offentliga int getPopulation () returbefolkning; offentligt tomrumssättPopulation (int population) this.population = population;
"
Om du vill använda en medlemsvariabel i a RealmObject
som en primär nyckel kan du använda @Primärnyckel
anteckning. Det här är till exempel hur du lägger till en primär nyckel som heter koda till Land
klass:
"java @PrimaryKey privat strängkod;
offentlig sträng getCode () returkod;
public void setCode (string code) this.code = code; "
Medan du läser data från en Realm är det mycket enkelt, vilket du kommer att se i nästa steg, skriver data till det är lite mer komplext. Realm är ACID-kompatibelt och för att säkerställa atomighet och konsistens, tvingar Realm dig att utföra alla skrivoperationer inom en transaktion.
För att starta en ny transaktion, använd beginTransaction
metod. På samma sätt, för att avsluta transaktionen, använd commitTransaction
metod.
Så här skapar du och sparar en instans av Land
klass:
"java myRealm.beginTransaction ();
// Skapa ett objekt Land country1 = myRealm.createObject (Country.class); // Ange dess fält country1.setName ("Norway"); country1.setPopulation (5.165.800); country1.setCode ( "NEJ");
myRealm.commitTransaction ();"
Du kanske har märkt det country1
skapades inte med hjälp av konstruktören av Land
klass. För en rikedom att hantera en förekomst av a RealmObject
, Förekomsten måste skapas med hjälp av Create
metod.
Om du måste använda konstruktören, glöm inte att använda copyToRealm
metod av relevanta Rike
objekt innan du begår transaktionen. Här är ett exempel:
"java // Skapa objektet Country country2 = nytt land (); country2.setName (" Ryssland "); country2.setPopulation (146430430); country2.setCode (" RU ");
myRealm.beginTransaction (); Land copyOfCountry2 = myRealm.copyToRealm (country2); myRealm.commitTransaction ();"
Realm erbjuder ett mycket intuitivt och flytande API för att skapa frågor. För att skapa en fråga, använd var
metod av relevanta Rike
objekt och passera klassen av objekten du är intresserad av. Efter att ha skapat frågan kan du hämta alla resultat med hjälp av hitta alla
metod som returnerar a RealmResults
objekt. I följande exempel hämtar och skriver vi ut alla objekt av typen Land
:
"java RealmResults
för (Land c: results1) Log.d ("results1", c.getName ());
// Skriv ut Norge, Ryssland "
Realm erbjuder flera lämpliga namngivna metoder, till exempel börjar med
, slutar med
, lesserThan
och större än
, du kan använda för att filtrera resultaten. Följande kod visar hur du kan använda större än
metod för att hämta bara dem Land
föremål vars befolkning
är större än 100 miljoner:
"java RealmResults
// får bara Ryssland "
Om du vill sortera resultatet av frågan kan du använda findAllSorted
metod. Som dess argument tar det en Sträng
specificerar namnet på fältet för att sortera efter och a boolean
specificerar sorteringsordningen.
"java // Sortera efter namn, i fallande ordning RealmResults
// Gets Ryssland, Norge "
I det här snabba tipset lärde du dig att använda Realm i ett Android-projekt. Du såg hur lätt det är att skapa en Realm-databas, lagra data i den och fråga den. Om du vill veta mer om Realm for Android kan du gå igenom sin Java-dokumentation.