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.
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'
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 ());
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; "
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 ();"
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
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
// 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
// Gets Russland, Norge "
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.