Utilizziamo Realm per la nostra app. La nostra app è stata rilasciata in versione beta. Ora voglio aggiungere un campo a uno dei nostri oggetti realm. Così ho scritto RealmMigration e ne ho scritto anche uno. La domanda qui è come applicare questa migrazione di Realm alla mia app. Io uso Realm.getInstance() ottenere l'istanza di regno ogni volta che voglio qualcosa. Ricorda che Realm.getInstance() viene utilizzato in ogni momento nell'intera app, desidero accedere al database di Realm.Il modo giusto di fare Migrazione del dominio Android
Quindi, mi è stato chiesto su come applicare questa migrazione? Qualsiasi vantaggio può essere utile. Grazie.
My RealmMigration è come segue.
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;
}
Getter e setter rimossi da RealmObject per interrompere la domanda. L'eccezione si è verificata quando provo a reinstallare l'app senza disinstallare quella precedente. Per favore consiglio
Grazie Christian. Se la mia comprensione è corretta, il modello avrà un campo appena creato e tutto il Realm.getInstance (this) sarebbe Realm.getInstance (config) –
User
Sì, è corretto. Dovresti usare 'Realm.getDefaultInstance()' o 'Realm.getInstance (RealmConfiguration)' invece di 'Realm.getInstance (Context)'. –
Oggi ho provato, sto ottenendo "io.realm.exceptions.RealmMigrationNeededException: Field 'isSessionRecordingUploading' supporta valori null nel file di Realm esistente Utilizza il tipo di box corrispondente per il campo 'isSessionRecordingUploading' o esegui la migrazione usando io.realm.internal.Table .convertColumnToNotNullable() ". Ho modificato la classe RealmMigration e aggiunto l'annotazione notNull al campo nel mio Realm Object. Ma ancora non ho potuto superare il problema. Ho aggiornato la Q. – User