[JAVA] [Android] Ich habe SQLite beendet und versucht, Realm zu verwenden

Einführung

Die Existenz einer "Datenbank", auf die jeder, der Android entwickelt, einmal stoßen wird. Wenn Sie SQL bereits berührt haben, ist SQLite eine gute Sache, aber ich bin es nicht. Also beschloss ich, Hilfe von einer Katze zu bekommen, und als ich verschiedene Plug-Ins nachschlug, stieß ich auf "Realm". Es wurde bereits in verschiedenen Apps verwendet und es wurde gesagt, dass es im iOS-Bereich einen gewissen Ruf hat, also habe ich beschlossen, damit zu spielen.

realm.gif

Entwicklungsumgebung

Sofort eingeführt

Fügen Sie dem Gradle direkt unter dem Projekt den folgenden Code hinzu.

build.gradle


buildscript {
  repositories {
    jcenter()
  }
  dependencies {
    classpath 'com.android.tools.build:gradle:2.3.3'
    classpath 'io.realm:realm-gradle-plugin:3.5.0' //hinzufügen
  }
}

Fügen Sie als Nächstes den folgenden Code zum Gradle der App hinzu, für die Sie mit Realm eine Datenbank erstellen möchten.

build.gradle


apply plugin: 'realm-android' //hinzufügen

dependencies {
  compile fileTree(include: ['*.jar'], dir: 'libs')
  compile 'com.android.support:appcompat-v7:26.0.0-alpha1'
  compile 'com.android.support:recyclerview-v7:26.0.0-alpha1'
  compile 'com.android.support:support-v4:26.0.0-alpha1'
  compile 'io.realm:android-adapters:2.1.0' //hinzufügen
}

(Bitte passen Sie die Version usw. jeder Support-Bibliothek an die jeweilige Umgebung an.)

Versuchen Sie zu implementieren

  1. Modellerstellung Das wichtigste Tabellendesign zum Erstellen einer Datenbank. Realm macht es sehr einfach zu entwerfen. Der Beispielcode ist unten dargestellt.

    public class Friend extends RealmObject {
    
      @PrimaryKey
      private String address;  //Adressspalte
      private String name;  //Namensspalte
    
      // getter setter...
      public String getName() { return name; }
    
      public void setName(String name) { this.name = name; }
    
      public String getAddress() { return address; }
    
      public void setAddress(String address) { this.address = address; }
    
    }
    

Ich habe einen String-Typ "Adresse" -Parameter (Spalte) und einen String-Typ "Name" -Parameter (Spalte) in einem Objekt (Datensatz) namens Friend definiert. Definieren Sie darunter Getter und Setter zum Lesen und Schreiben von Werten in jeder Spalte. Dieses Mal wollte ich die Adressspalte als Primärschlüssel festlegen, also habe ich die Annotation @ PrimaryKey hinzugefügt. Weitere Anmerkungen und ausführliche Erläuterungen finden Sie in der offiziellen Dokumentation. Die Modellerstellung ist in Realm relativ flexibel, sodass Sie die meisten Dinge tun können, indem Sie immer mehr Anmerkungen und Ihre eigene Methode schreiben. Indem Sie Ihre eigene Methode schreiben, können Sie auch die Lesbarkeit verbessern, ohne häufig ausgeführte Operationen auf der Controllerseite zu schreiben.

  1. Ansicht erstellen Wir erstellen einen Beispielbildschirm zum Hinzufügen von Daten zum zuvor erstellten Modell (Friend-Tabelle) und einen Bildschirm zum Anzeigen einer Liste.

Fügen Sie EditText hinzu, der die Eingabe von Adresse und Name sowie die Schaltfläche zur Bestätigung der Registrierung akzeptiert.

Fügen Sie RecyclerView zur Liste hinzu.

    ```row_friend.xml
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:padding="10dp">
    
      <TextView
        android:id="@+id/label1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Name:"/>
    
      <TextView
        android:id="@+id/name_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/label1"
        android:layout_toEndOf="@+id/label1"/>
    
      <TextView
        android:id="@+id/label2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignStart="@+id/label1"
        android:layout_below="@+id/label1"
        android:layout_marginTop="10dp"
        android:text="Adresse:"/>
    
      <TextView
        android:id="@+id/address_text"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/label2"
        android:layout_toEndOf="@+id/label2"/>
    
    </RelativeLayout>
    ```

Fügen Sie eine Textansicht hinzu, in der der Name bzw. die Adresse angezeigt werden.

  1. Controller-Erstellung Da der Bildschirm beim Starten der Anwendung dieses Mal weggelassen wird, stellen Sie bitte ein, dass jedes Fragment angezeigt wird, indem Sie der Root-Aktivität zwei Schaltflächen hinzufügen.

Die Eingabe von Adresse und Name wird von EditText empfangen und der Wert wird über Bundle an AlertDialog übergeben. Wenn die positive Schaltfläche von AlertDialog gedrückt wird und der Wert der eingegebenen Adresse bereits in der Tabelle vorhanden ist, wird der Name aktualisiert (Aktualisieren), und wenn er nicht vorhanden ist, wird eine neue Registrierung (Einfügen) durchgeführt. .. Ich bin überrascht, dass diese in nur einer Zeile der Realm-Methode "copyToRealmOrUpdate ()" erreicht werden.

In der RecyclerView werden alle Datensätze in der Friend-Tabelle aufgelistet. Wie Sie hier vielleicht bemerkt haben, muss Realm die Daten nicht erneut abrufen, wenn die aus der Tabelle abgerufenen Datensätze aktualisiert oder gelöscht werden. In diesem Code wird der erfasste Datensatz in einer Variablen namens "Ergebnis" gespeichert. Wenn sich jedoch die darin enthaltenen Daten ändern, werden die Daten nacheinander synchronisiert. Es ist wunderbar.

Mit ViewHolder ist es etwas schneller (leichter). Erstellen Sie Ihren eigenen benutzerdefinierten Adapter, der RealmRecyclerViewAdapter <Tabellenname, Adaptername.ViewHolder-Name> erbt.

Tips Ich habe den Code für MainActivity diesmal nicht veröffentlicht, aber Sie müssen Realm mit Activity initialisieren, wenn die App gestartet wird. Ich denke, es ist in Ordnung, wenn Sie den folgenden Code hinzufügen.

Realm.init(this);
RealmConfiguration config = new RealmConfiguration.Builder().build();
Realm.setDefaultConfiguration(config);

Es scheint, dass es verschiedene Parameter für die Konfiguration gibt, also im offiziellen Dokument ...

Nach dem Verteilen der App werden Anfragen wie "Ich möchte eine neue Spalte hinzufügen!", "Ich möchte die Spaltenattribute ändern!" Und "Ich möchte überhaupt eine Tabelle hinzufügen" angezeigt. Realm kann dies mit der Migrationsfunktion erledigen. Wenn es sich jedoch noch in der Entwicklung und vor der Verteilung befindet, ist es schwierig, die Migration einzeln zu beschreiben. Wenn Sie zum Zeitpunkt der Initialisierung den folgenden Code hinzufügen, wird die Datenbank daher einmal sauber gelöscht, sodass keine Migration erforderlich ist.

Realm.deleteRealm(config);

Dies ist nützlich, wenn die Datenbankspezifikationen in den frühen Entwicklungsstadien noch nicht fertiggestellt wurden!

Am Ende

Als ich Realm tatsächlich benutzte, war ich beeindruckt von seiner Benutzerfreundlichkeit. Es ist auch wunderbar, dass die Antwort im Vergleich zu anderen verwandten Plug-Ins überwältigend schnell ist.

Ich denke, es ist perfekt für diejenigen, die SQL noch nie berührt haben und wenig Erfahrung haben. Wenn Sie Probleme mit der von Androi entwickelten Datenbank haben, können Sie sie gerne ausprobieren!

Es gibt Methoden und Funktionen, die noch nicht eingeführt wurden, also im offiziellen Dokument ... Realm Java 3.5.0

Recommended Posts

[Android] Ich habe SQLite beendet und versucht, Realm zu verwenden
[Android] Ich habe versucht, das Koordinatorlayout zu verwenden.
Ich habe versucht, Realm mit Swift UI zu verwenden
Ich habe versucht, Gson zu benutzen
Ich habe versucht, TestNG zu verwenden
Ich habe versucht, Galasa zu benutzen
Ich habe versucht, "nifty cloud mobile backend" und "Firebase" -Authentifizierung auf Kotlin + Android zu verwenden
Ich habe versucht, eine Datenbankverbindung in der Android-Entwicklung zu verwenden
Ich habe versucht, YOLO v4 unter Ubuntu und ROS zu verwenden
Ich habe versucht, Azure Cloud-Init zu verwenden
Ich habe versucht, Apache Wicket zu verwenden
Ich habe versucht, Java REPL zu verwenden
Ich habe einen Unit-Test der Rails-Anwendung mit RSpec und FactoryBot versucht
[Android] [Bibliothek] Ich habe versucht, eine Animationsbibliothek namens "Vorher Nachher Animation" zu verwenden.
Ich habe versucht, die CameraX-Bibliothek mit Android Java Fragment zu verwenden
Ich habe jetzt versucht, Anakia + Jing zu verwenden
Ich habe versucht, Spring + Mybatis + DbUnit zu verwenden
Ich habe versucht, JOOQ mit Gradle zu verwenden
Ich habe versucht, die Java8 Stream API zu verwenden
Ich habe versucht, JWT in Java zu verwenden
Ich habe versucht, Pari GP Container zu verwenden
Ich habe versucht, WebAssembly Stadio (Version 2018/4/17) zu verwenden.
Ich habe versucht, Java Memo LocalDate zu verwenden
Ich habe versucht, Google HttpClient von Java zu verwenden
Ich habe versucht, Docker und Maven / Netbean mit Jib gut zu integrieren
Ich wollte eine Zeile animieren, wenn ich Realm und RecyclerView unter Android verwende, aber ich habe aufgegeben
Ich habe versucht, eine einfache Gesichtserkennungs-Android-Anwendung mit OpenCV zu erstellen
Ich habe versucht, die Elasticsearch-API in Java zu verwenden
Ich habe versucht, das Java-Diagnosetool Arthas zu verwenden
Ich habe WSL2 + Ubuntu in Window10 eingeführt und versucht, GDC, DMD, LDC zu verwenden
Ich habe versucht, UICollectionViewListCell zu verwenden, das von Xcode12 hinzugefügt wurde.
Ich habe mit Thymeleaf meinen eigenen Dialekt erstellt und eingestellt und versucht, ihn zu verwenden
Ich habe versucht, Scalar DL mit Docker zu verwenden
Ich habe versucht, mit OpenTrip Planner und GTFS eine eigene Übertragungsanleitung zu erstellen
Ich habe versucht, OnlineConverter mit SpringBoot + JODConverter zu verwenden
Es ist neu, aber ich habe versucht, Groonga zu verwenden
Ich habe versucht, OpenCV mit Java + Tomcat zu verwenden
[JDBC ③] Ich habe versucht, mithilfe von Platzhaltern und Argumenten Eingaben über die Hauptmethode vorzunehmen.
Ich habe versucht, Junit mit Mac VScode Maven zu verwenden
[Für Anfänger] Ich habe versucht, DBUnit mit Eclipse zu verwenden
[Für Anfänger] Ich habe versucht, JUnit 5 mit Eclipse zu verwenden
Ich habe versucht, grafana und postgres [docker-compose] zu verknüpfen
Ich habe auch Web Assembly mit Nim und C ausprobiert
Ich habe mit Ruby einen Blackjack gemacht (ich habe versucht, Minitest zu verwenden)
[API] Ich habe versucht, die Postleitzahlensuch-API zu verwenden
Ich habe versucht, JavaFX und Spring Framework zu verknüpfen.
Ich habe versucht, einen Server mit Netty zu implementieren
Ich habe versucht, den Profiler von IntelliJ IDEA zu verwenden
Ich habe versucht, mit Wercker ein Docker-Image zu erstellen und zu veröffentlichen, mit dem GlassFish 5 gestartet wird
Ich habe es mit Spring versucht.
Ich habe versucht, Tomcat zu setzen
Ich habe youtubeDataApi ausprobiert.
Ich habe versucht, ① umzugestalten
Ich habe FizzBuzz ausprobiert.
Ich habe JHipster 5.1 ausprobiert
Versuchte Mastodons Toot- und Streaming-API in Java
Ich habe versucht, die Server-Push-Funktion von Servlet 4.0 zu verwenden
Ich habe versucht, CSV mit Outsystems zu lesen und auszugeben