2017-05-10 12 views
0

王国での移行に関する質問があります。更新が行われた後にデータベースバージョン0をキャッチするアプリケーションでは、すべて正常に動作しますが、アプリケーションのクリーンインストールが完了すると、1への移行を試みるために再オープンするときに問題が発生します。これらのケースを進める正しい方法でしょうか?どうすればバージョンを設定できますか?移行およびレルムデータベースのバージョン

+0

は、クリーンインストールは、すべてのファイルが削除されていることを暗示していますか?バージョンはレルム内に格納されているため、すべてを開始するようなものです。 – geisshirt

+0

正確には、新しいデバイスにインストールします。問題は、移行スキーマバージョン1を渡すことです。古いアプリケーションを新しいものに更新するときは正常ですが、新しいデバイスでインストールが完了した場合は、アプリケーションを強制終了して再び開くことができますもう一度移行を実現しようとしています。 –

+0

アプリが最初のインスタンスを取得すると、レルムファイルが作成されます。スキーマのバージョンは未定義であるため、モデルクラスが使用され、スキーマのバージョンは 'RealmConfiguration'(あなたの場合は1)で指定したものに設定されます。次回アプリケーションが起動すると、ディスク上のバージョンと構成内のバージョンは同じになり、移行は実行されません。あなたの設定でスキーマのバージョンを設定しますか? – geisshirt

答えて

0

移行クラスでは、事前にoldVersionを確認してから、必要なときにのみ移行を進める必要があります。

// Example migration adding a new class 
RealmMigration migration = new RealmMigration() { 
    @Override 
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 

    // DynamicRealm exposes an editable schema 
    RealmSchema schema = realm.getSchema(); 

    // Migrate to version 1 
    if (oldVersion == 0) { 
     schema.create("Person") 
      .addField("name", String.class) 
      .addField("age", int.class); 
     oldVersion++; 
    } 

    // Migrate to version 2: Add a primary key + object references 
    // Example: 
    if (oldVersion == 1) { 
     schema.get("Person") 
      .addField("id", long.class, FieldAttribute.PRIMARY_KEY) 
      .addRealmObjectField("favoriteDog", schema.get("Dog")) 
      .addRealmListField("dogs", schema.get("Dog")); 
     oldVersion++; 
    } 
    } 
} 

Realm Migration example

関連する問題