2017-07-04 14 views
0

私は領域の移行の問題に直面しています。私は新しいモデルクラスを領域データベースに追加したいと思います。これを解決する方法を教えてください。io.realm.exceptions.RealmMigrationNeededException:このRealmのスキーマに 'ImportantCalls'クラスがありませんか?

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

     if (oldVersion==0){ 

      oldVersion ++; 
     } 

     if (oldVersion == 1) { 

      schema.create("ImportantCalls") 
        .addField("id", int.class) 
        .addField("number", String.class) 
        .addField("callType", String.class) 
        .addField("startTime", String.class) 
        .addField("callRecords", String.class) 
        .addField("callStatus", String.class) 
        .addField("actualStartTime", Long.class); 
      oldVersion++; 
     } 
    } 

    @Override 
    public int hashCode() { 
     return 37; 
    } 

    @Override 
    public boolean equals(Object o) { 
     return (o instanceof Migration); 
    } 
} 

上記のコードは、レルムを移行するためのコードです。

以下のコードは、例外iはレルム `によってレルムデータベース内のデータを削除した移行を行う前realm.getDefaultInstance(); in this line.

に発生しているアンドロイド

 protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_dash_board); 
     Realm.init(this); 
//  RealmConfiguration config = new RealmConfiguration.Builder() 
//    .deleteRealmIfMigrationNeeded() 
//    .build(); 
     RealmConfiguration config = new RealmConfiguration.Builder() 
       .schemaVersion(5) // Must be bumped when the schema changes 
       .migration(new Migration()) // Migration to run 
       .build(); 

     Realm.setDefaultConfiguration(config); 
//  Realm.deleteRealm(config); 
     realm.getDefaultInstance(); 

でのOnCreate()メソッドでiitializing私のレルムです。 deleteRealm(config);

実際には、データを移行しようとしたので、実際にはうまくいきません。これを解決する方法を教えてください。

+0

移行ではv5が使用されていますが、コードではクラスをv1に追加します。 2-5で何が起こっていますか? –

+0

@ Christian Melchior私のコードで変更したいもの –

+0

@PrabhaKaranバージョン2から5の移行手順が必要ですか? – geisshirt

答えて

0

まず、プロジェクトをクリーンアップして再構築してください。次に、データベースが存在しないが、取得してUIに表示するかどうかを確認します。 RealmObject.isValid()を使用してチェックします。例:

mInteractor.getOneDayData(dayOfWeek, new Repositories.Callback<OneDay>() { 
     @Override 
     public void onSuccess(OneDay item) { 
      if (item.isValid()) { // please check if item is valid before you use it 
       //udpate ui 

      } else { 
       mView.showToast("No data"); 
      } 
     } 

    }); 
関連する問題