Upp och Running With Realm for Android

Introduktion

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.

1. Lägga till Realm till ett projekt

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'

2. Skapa en rike

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 ());

3. Skapa en 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; "

4. Skapa transaktioner

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 ();"

5. Skriva frågor

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 results1 = myRealm.where (Country.class) .findAll ();

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 results2 = myRealm.where (Country.class) .greaterThan ("population", 100000000) .findAll ();

// 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 results3 = myRealm.where (Country.class) .findAllSorted ("name", false);

// Gets Ryssland, Norge "

Slutsats

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.