2017-03-10 4 views
0

Ich brauche Hilfe mit Realm.io, ich wurde gerade in einem Projekt vorgestellt, dem ich beitrete. Der ehemalige Entwickler hat kürzlich den Quellcode unserer App angezeigt und mir gesagt, dass er Realm.io benutzt, um zu überprüfen, ob die App zum ersten Mal vom Benutzer geöffnet wurde. Hier ist ein Code-Snippet dessen, was er für die onCreate() -Methode verwendet. Ich verwende Android Studio zur Entwicklung.Wie kann ich meinen Code ändern, um mit Realm besser zu mehreren Tabellen zu passen?

Realm.init(getApplicationContext()); 
    final Realm realm = Realm.getDefaultInstance(); 

    final RealmResults<Configuracao> configuracoes = 
     realm.where(Configuracao.class) 
      .equalTo("chave", "primeiroAcesso") 
      .findAll(); 

Das Problem ist, dass jetzt muss ich neue Daten auf die Datenbank einfügen, so habe ich eine Klasse geschaffen, die wie folgt aussieht:

public class medicine extends RealmObject { 
    @PrimaryKey 
    private int id; 
    private String med; 
    private String doctor; 

    /* Setters and getters here */ 

    } 

ich in die RealmMigrationNeeded Ausnahme renne, ich lese die Dokumente und ich bin mir bewusst, dass ich die Migration machen muss.

Meine Frage ist: Wo genau stelle ich den Migrationscode? Soll ich es in die neue Klassendatei einfügen?

Auch in der Dokumentation sie mir sagen, dass ich so die Version des Schemas durch etwas ändern müssen:

RealmConfiguration config1 = new RealmConfiguration.Builder() 
      .name("default1.realm") 
      .schemaVersion(3) 
      .migration(new Migration()) 
      .build(); 

Aber sie sagen auch, dass, wenn diese Version keine Ausnahme geben wird geworfen werden, also rate ich, dass ich das Schema ändern muss, bevor ich das mache?

Muss ich irgendetwas in der Datenbank selbst ändern und dann die Migration innerhalb der App aufrufen, oder ist die Migration der Prozess, um das Schema zu ändern? Sorry über den langen Text, aber ich bin wirklich verwirrt. Danke für die Hilfe im Voraus.

Antwort

1

Ja, Sie müssen eine benutzerdefinierte Migrationsklasse erstellen, die RealmMigration implementieren muss. Die Schemaversion, die Sie in der Konfiguration angeben, ist die Version, die Ihr Realm nach der Migration haben wird. Sie können hier ein Beispiel sehen: https://github.com/realm/realm-java/blob/master/examples/migrationExample/src/main/java/io/realm/examples/realmmigrationexample/model/Migration.java

In Ihrem Fall ist es in etwa so aussehen würde:

public class MyMigration implements RealmMigration { 
    @Override 
    public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) { 
     RealmSchema schema = realm.getSchema(); 

     if (oldVersion == 2) { 
      schema.create("medicine") 
        .addField("id", int.class, FieldAttribute.PRIMARY_KEY) 
        .addField("med", String.class) 
        .addField("doctor", String.class); 

     } 
    } 
}  
+0

Oh danke ich denke, dass so ziemlich meine Probleme löst, so nehme ich an dem Reich immer in der Version 0 anfangen? Also muss ich einfach von dort weitermachen? –

+0

Ja. Realms beginnen bei Version 0. –

Verwandte Themen