2017-10-06 4 views
0

Je souhaite utiliser Realm migration pour conserver les données d'une seule table. Comme par exemple ici, je veux maintenir les données pour la table Profile User et supprimer tout le reste de la table.Conserver la migration de données de domaine pour une table spécifique uniquement

Voici ce que j'ai fait jusqu'à présent. Mais tout dans la base de données est supprimé.

initRealm() est appelé à partir onCreate()

private void initRealm() { 
    Realm.init(this); 
    RealmConfiguration configuration = new RealmConfiguration.Builder() 
      .schemaVersion(3) 
      .name("sipradi") 
      .migration(new RealmMigrationClass()) 
      .deleteRealmIfMigrationNeeded() 
      .build(); 
    Realm.setDefaultConfiguration(configuration); 
} 

La classe de configuration

private class RealmMigrationClass implements RealmMigration { 
    @Override 
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 
     RealmSchema schema = realm.getSchema(); 
     if (oldVersion == 2) { 
      RealmObjectSchema profileUserSchema = schema.get("ProfileUser"); 
      profileUserSchema.addField("test", String.class); 
      oldVersion++; 
     } 
    } 
} 
+0

Si vous souhaitez migrer, vous avez probablement ne devrait pas spécifier '.deleteRealmIfMigrationNeeded()': P – EpicPandaForce

+0

Oui frère je sais mais comment pourrais-je résoudre ce scénario. – viper

+1

supprimer '.deleteIfMigrationNeeded()'? – EpicPandaForce

Répondre

2

Cela effacera toutes les données à l'exception de la classe UserProfile

private void initRealm() { 
    Realm.init(this); 
    RealmConfiguration configuration = new RealmConfiguration.Builder() 
      .schemaVersion(3) 
      .name("sipradi") 
      .migration(new RealmMigrationClass()) 
      .build(); 
    Realm.setDefaultConfiguration(configuration); 
} 

private class RealmMigrationClass implements RealmMigration { 
    @Override 
    public void migrate(DynamicRealm realm, long oldVersion, long newVersion) { 
     RealmSchema schema = realm.getSchema(); 
     if (oldVersion == 2) { 
      RealmObjectSchema profileUserSchema = schema.get("ProfileUser"); 
      profileUserSchema.addField("test", String.class); 

      // Delete all other data than `ProfileUser` 
      for (RealmObjectSchema classSchema : schema.getAll()) { 
       if (classSchema.getClassName().equals("ProfileUser")) { 
        continue; 
       } 
       realm.delete(classSchema.getClassName()); 
      } 
      oldVersion++; 
     } 
    } 
} 
+0

Sauvé ma vie bro. Je vous remercie – viper