私たちはRealmを使用しています。私たちのアプリはベータ版になっています。今私はrealmオブジェクトの1つにフィールドを追加したいと思います。だから私はRealmMigrationを書く必要があり、私も1つを書きました。ここでの質問は、このレルムの移行をアプリに適用する方法です。私はRealm.getInstance()を使用して、何かしたいときはいつでもrealmインスタンスを取得します。 Realm.getInstance()は毎回アプリ全体で使用されているので、Realmデータベースにアクセスしたいと思います。Realm Migration Androidの正しい方法
この移行を適用する方法について私は少し質問しますか?任意のリードが役立ちます。ありがとう。
私のRealmMigrationは以下の通りです。
public class RealmMigrationClass implements RealmMigration {
@Override
public void migrate(DynamicRealm realm, long oldVersion, long newVersion) {
if(oldVersion == 0) {
RealmSchema sessionSchema = realm.getSchema();
if(oldVersion == 0) {
RealmObjectSchema sessionObjSchema = sessionSchema.get("Session");
sessionObjSchema.addField("isSessionRecordingUploading", boolean.class, FieldAttribute.REQUIRED)
.transform(new RealmObjectSchema.Function() {
@Override
public void apply(DynamicRealmObject obj) {
obj.set("isSessionRecordingUploading", false);
}
});
sessionObjSchema.setNullable("isSessionRecordingUploading",false);
oldVersion++;
}
}
}
}
public class Session extends RealmObject {
@PrimaryKey
private String id;
@Required
private Date date;
private double latitude;
private double longitude;
private String location;
private String note;
private String appVersion;
private String appType;
private String deviceModel;
private HeartRecording heart;
private TemperatureRecording temperature;
private LungsRecording lungs;
@NotNull
private boolean isSessionRecordingUploading;
private boolean sessionInfoUploaded;
private boolean lungsRecordingUploaded;
private boolean heartRecordingUploaded;
}
RealmObjectからゲッターとセッターを削除して質問を短くしました。前のアプリケーションをアンインストールせずにアプリケーションを再インストールしようとすると例外が発生しました。ご意見をお聞かせください。それは、ここで説明されて
ありがとうございました。私の理解が正しい場合、モデルは新しく作成されたフィールドを持ち、すべてのRealm.getInstance(これ)はRealm.getInstance(config <上のように設定されます) – User
です。 'Realm.getInstance(Context)'の代わりに 'Realm.getDefaultInstance()'や 'Realm.getInstance(RealmConfiguration)'を使うべきです。 –
今日、私は "io.realm.exceptions.RealmMigrationNeededException"を取得しようとしました:フィールド 'isSessionRecordingUploading'は、既存のレルムファイルでヌル値をサポートしています。 'isSessionRecordingUploading'フィールドに対応するボックスタイプを使用するか、io.realm.internal.Table .convertColumnToNotNullable() " RealmMigrationクラスを少し修正し、RealオブジェクトのフィールドにnotNullアノテーションを追加しました。しかし、私はまだこの問題を克服できませんでした。私はQを更新しました。 – User