Opp og Running With Realm for Android

Introduksjon

Hvis du har holdt opp med de nyeste trendene i Android-utviklingen, har du sikkert hørt om Realm. Realm er en lett database som kan erstatte både SQLite og ORM biblioteker i Android-prosjekter.

Sammenlignet med SQLite, er Realm raskere og har mange moderne funksjoner, for eksempel JSON-støtte, flytende API, dataendringer, og krypteringsstøtte, noe som gjør livet enklere for Android-utviklere..

I dette raske tipset skal du lære grunnleggende om Realm for Android. I denne opplæringen vil jeg bruke Realm v0.84.1.

1. Legge til Realm i et prosjekt

Hvis du vil bruke Realm i et Android-prosjekt, må du legge det til som en kompilere avhengighet i app modulens build.gradle fil.

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

2. Opprette et rike

En Realm ligner en SQLite-database. Den har en fil tilknyttet den, som, når den er opprettet, vil fortsette på Android's filsystem.

For å opprette en ny Rike, kan du ringe den statiske Realm.getInstance metode fra innsiden av noen Aktivitet.

java Realm myRealm = Realm.getInstance (kontekst);

Merk at ringer Realm.getInstance, uten å passere en RealmConfiguration til det, resulterer i opprettelsen av en Realm-fil som heter default.realm.

Hvis du vil legge til et annet rike i appen din, må du bruke en RealmConfiguration.Builder objekt og gi Realm-filen et unikt navn.

java Realm myOtherRealm = Realm.getInstance (nytt RealmConfiguration.Builder (kontekst) .name ("myOtherRealm.realm") .build ());

3. Opprette en RealmObject

Enhver JavaBean kan lagres i en Realm når den strekker seg RealmObject klasse. Hvis du lurer på hva en JavaBean er, er det bare en Java-klasse som er serialiserbar, har en standardkonstruktor, og har getter / setter-metoder for medlemsvariablene. For eksempel kan forekomster av den følgende klassen enkelt lagres i et Rike:

"java offentlig klasse Land strekker seg RealmObject

privat strenge navn; privat int befolkning; offentlig land ()  offentlig streng getName () returnavn;  Offentlig tomt settnavn (Strenge navn) this.name = Name;  offentlig int getPopulation () returpopulasjon;  Offentlig tomrumssettPopulasjon (int populasjon) this.population = population;  

"

Hvis du vil bruke en medlemsvariabel av a RealmObject Som en primærnøkkel kan du bruke @Primærnøkkel merknad. For eksempel, her er hvordan du vil legge til en primærnøkkel som heter kode til Land klasse:

"java @PrimaryKey privat strengkode;

offentlig String getCode () returkode;

Offentlig tomgangssettKode (Stringkode) this.code = kode; "

4. Opprette Transaksjoner

Mens du leser data fra et Rike er det veldig enkelt, som du vil se i neste trinn, skriver du data til det er litt mer komplekst. Realm er ACID-kompatibelt og for å sikre atomkraft og konsistens, tvinger Realm deg til å utføre alle skriveoperasjoner innenfor en transaksjon.

For å starte en ny transaksjon, bruk beginTransaction metode. På samme måte, for å avslutte transaksjonen, bruk commitTransaction metode.

Slik lager du og lagrer en forekomst av Land klasse:

"java myRealm.beginTransaction ();

// Opprett et objekt Land country1 = myRealm.createObject (Country.class); // Angi feltene country1.setName ("Norway"); country1.setPopulation (5,165,800); country1.setCode ( "NEI"); 

myRealm.commitTransaction ();"

Du har kanskje lagt merke til det COUNTRY1 ble ikke opprettet ved hjelp av konstruktøren til Land klasse. For et rike å styre en forekomst av a RealmObject, forekomsten må opprettes ved hjelp av Create metode.

Hvis du må bruke konstruktøren, ikke glem å bruke copyToRealm metode av relevant Realm objekt før du forplikter transaksjonen. Her er et eksempel:

"java // Opprett objektet Country country2 = new Country (); country2.setName (" Russia "); country2.setPopulation (146430430); country2.setCode (" RU ");

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

5. Skriving av spørringer

Realm tilbyr en veldig intuitiv og flytende API for å lage spørsmål. For å lage en forespørsel, bruk hvor metode av relevant Realm objekt og pass klassen av objektene du er interessert i. Etter å ha opprettet spørringen, kan du hente alle resultatene ved hjelp av findAll metode, som returnerer a RealmResults gjenstand. I følgende eksempel henter og skriver vi ut alle objekter av typen Land:

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

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

// Skriver Norge, Russland "

Realm tilbyr flere hensiktsmessige navngitte metoder, for eksempel begynner med, slutter med, lesserThan og større enn, Du kan bruke til å filtrere resultatene. Følgende kode viser hvordan du kan bruke større enn metode for å hente bare de Land gjenstander hvis befolkning er større enn 100 millioner:

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

// Gets only Russia "

Hvis du vil at resultatene av spørringen skal sorteres, kan du bruke findAllSorted metode. Som argumenter tar det en string Angir navnet på feltet for å sortere etter og a boolean angir sorteringsrekkefølgen.

"java // Sorter etter navn, i synkende rekkefølge RealmResults results3 = myRealm.where (Country.class) .findAllSorted ("navn", false);

// Gets Russland, Norge "

Konklusjon

I dette raske tipset lærte du hvordan du bruker Realm i et Android-prosjekt. Du så hvor lett det er å lage en Realm-database, lagre data i den, og spørre den. For å lære mer om Realm for Android, kan du gå gjennom sin Java-dokumentasjon.