Mit Realm für Android

Einführung

Wenn Sie mit den neuesten Trends in der Android-Entwicklung Schritt halten, haben Sie wahrscheinlich von Realm gehört. Realm ist eine einfache Datenbank, die sowohl SQLite- als auch ORM-Bibliotheken in Ihren Android-Projekten ersetzen kann.

Im Vergleich zu SQLite ist Realm schneller und bietet viele moderne Funktionen, wie JSON-Unterstützung, eine fließende API, Benachrichtigungen zu Datenänderungen und Verschlüsselungsunterstützung, die Android-Entwicklern das Leben erleichtern.

In diesem kurzen Tipp lernen Sie die Grundlagen von Realm für Android. In diesem Tutorial werde ich verwenden Realm v0.84.1.

1. Realm zu einem Projekt hinzufügen

Um Realm in einem Android-Projekt verwenden zu können, müssen Sie es als hinzufügen kompilieren Abhängigkeit in der App Modul build.gradle Datei.

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

2. Erstellen eines Realms

Ein Realm ähnelt einer SQLite-Datenbank. Es ist eine Datei zugeordnet, die nach der Erstellung auf dem Android-Dateisystem bestehen bleibt.

Um ein neues Realm zu erstellen, können Sie statisch aufrufen Realm.getInstance Methode aus einem beliebigen Aktivität.

java Realm myRealm = Realm.getInstance (Kontext);

Beachten Sie diesen Anruf Realm.getInstance, ohne a RealmConfiguration Dazu wird die Erstellung einer Realm-Datei aufgerufen default.realm.

Wenn Sie Ihrer App ein weiteres Realm hinzufügen möchten, müssen Sie ein RealmConfiguration.Builder Objekt und geben Sie der Realm-Datei einen eindeutigen Namen.

java Realm myOtherRealm = Realm.getInstance (neuer RealmConfiguration.Builder (Kontext) .name ("myOtherRealm.realm") .build ());

3. Erstellen eines RealmObject

Jedes JavaBean kann in einem Realm gespeichert werden, sobald es erweitert wird RealmObject Klasse. Wenn Sie sich fragen, was ein JavaBean ist, handelt es sich einfach um eine Java-Klasse, die serialisierbar ist, über einen Standardkonstruktor verfügt und über Getter / Setter-Methoden für ihre Member-Variablen verfügt. Zum Beispiel können Instanzen der folgenden Klasse leicht in einem Realm gespeichert werden:

"java public class Country erweitert RealmObject

privater String-Name; private int Bevölkerung public Country ()  public String getName () Rückkehrname;  public void setName (Zeichenfolgenname) this.name = name;  public int getPopulation () return Population;  public void setPopulation (int Population) this.population = Bevölkerung;  

"

Wenn Sie eine Membervariable von a verwenden möchten RealmObject Als Primärschlüssel können Sie den @Primärschlüssel Anmerkung. So fügen Sie beispielsweise einen Primärschlüssel hinzu Code zum Land Klasse:

"java @PrimaryKey private String-Code;

public String getCode () Rückkehrcode;

public void setCode (String code) this.code = code; "

4. Transaktionen anlegen

Während das Lesen von Daten aus einem Realm sehr einfach ist, wie Sie im nächsten Schritt sehen werden, ist das Schreiben von Daten etwas komplexer. Realm ist ACID-konform. Um Einheitlichkeit und Konsistenz sicherzustellen, zwingt Realm Sie, alle Schreibvorgänge innerhalb einer Transaktion auszuführen.

Um eine neue Transaktion zu starten, verwenden Sie die beginTransaction Methode. Um die Transaktion zu beenden, verwenden Sie ebenfalls die commitTransaction Methode.

So erstellen und speichern Sie eine Instanz von Land Klasse:

"java myRealm.beginTransaction ();

// ein Objekt erstellen country country1 = myRealm.createObject (Country.class); // Setze die Felder country1.setName ("Norway"); country1.setPopulation (5165800); country1.setCode ("NO"); 

myRealm.commitTransaction (); "

Das hast du vielleicht gemerkt Land1 wurde nicht mit dem Konstruktor von erstellt Land Klasse. Für ein Realm, um eine Instanz von a zu verwalten RealmObject, Die Instanz muss mit dem erstellt werden createObject Methode.

Wenn Sie den Konstruktor verwenden müssen, vergessen Sie nicht die Verwendung von copyToRealm Methode des relevanten Reich Objekt, bevor Sie die Transaktion festschreiben. Hier ist ein Beispiel:

"java // Das Objekt erstellen country country2 = new Country (); country2.setName (" Russia "); country2.setPopulation (146430430); country2.setCode (" RU ");

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

5. Abfragen schreiben

Realm bietet eine sehr intuitive und fließende API zum Erstellen von Abfragen. Um eine Abfrage zu erstellen, verwenden Sie die woher Methode des relevanten Reich object und übergeben Sie die Klasse der Objekte, an denen Sie interessiert sind. Nachdem Sie die Abfrage erstellt haben, können Sie alle Ergebnisse mit dem Befehl abrufen finde alle Methode, die a zurückgibt RealmErgebnisse Objekt. Im folgenden Beispiel werden alle Objekte des Typs abgerufen und gedruckt Land:

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

für (Land c: Ergebnisse1) Log.d ("Ergebnisse1", c.getName ());

// druckt Norwegen, Russland "

Realm bietet mehrere passend benannte Methoden, wie z beginnt mit, endet mit, weniger als und größer als, Sie können die Ergebnisse filtern. Der folgende Code zeigt Ihnen, wie Sie das verwenden können größer als Methode, um nur diese abzurufen Land Objekte, deren Population ist größer als 100 Millionen:

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

// bekommt nur Russland "

Wenn Sie möchten, dass die Ergebnisse der Abfrage sortiert werden, können Sie das verwenden findAllSorted Methode. Als Argumente braucht es a String Geben Sie den Namen des Felds an, nach dem sortiert werden soll, und a boolean Angabe der Sortierreihenfolge.

"java // Sortiere nach Name in absteigender Reihenfolge RealmResults results3 = myRealm.where (Country.class) .findAllSorted ("name", false);

// bekommt Russland, Norwegen "

Fazit

In diesem kurzen Tipp haben Sie gelernt, wie Sie Realm in einem Android-Projekt verwenden. Sie haben gesehen, wie einfach es ist, eine Realm-Datenbank zu erstellen, Daten darin zu speichern und abzufragen. Weitere Informationen zu Realm für Android finden Sie in der Java-Dokumentation.