2016-12-20 4 views
0

私はRealm androidを使用しており、移行を使用して既存の主キーのデータ型を変更したいと考えていました。レルムAndroidのマイグレーションで主キーのデータ型を変更するデータ型を変更する

私は、コードの上に移行

schema.get("Test") 
     .addField("id_new", String.class) 
     .removeField("id") 
     .addPrimaryKey("id_new") 
     .renameField("id_new", "id"); 

次のコードを使用するには、壊すことなく、スキーマを移行しているが、私はそれが失敗している新しいスキーマにデータを書き込むしようとした場合。

古いデータを永続化し、変換メソッドを使用したくないです。

+0

あなたが新しいスキーマにデータを書き込むしようとすると、それが失敗している何を意味するのですか?その例+ stacktraceは良いでしょう。 –

+0

が「失敗しています」 – EpicPandaForce

+0

保存した後にデータを取得しようとすると、結果が空になり、データを書き込んだときにエラーメッセージが表示されません。 –

答えて

0

あなたはデータを保持したくない場合は、あなただけのdeleteRealmIfMigrationNeededを(呼び出すことができます)ビルダーの方法:

RealmConfiguration config = new RealmConfiguration.Builder() 
              .deleteRealmIfMigrationNeeded() 
              .build(); 

が、私が思うに、それは唯一のアプリケーションの開発サイクルのためposableです。

リリースされたアプリケーションには、実際の移行スクリプトが必要です。あなたの質問のために、私が使用することをお勧め:

schema.get("Test") 
    .addField("id_new", String.class, FieldAttribute.PRIMARY_KEY) 
    .transform(new RealmObjectSchema.Function() { 
        @Override 
        public void apply(DynamicRealmObject obj) { 
         // yuors transformation from id to id_new 
        } 
       }) 
    .removeField("id") 
    .renameField("id_new", "id"); 

も参照してください:

Official docs

Migration sample class

関連する問題