J'utilise Realm comme back-end dans ma candidature. J'ai créé une table nommée Setting. J'ai ajouté des valeurs dans ce tableau, en suivant les étapes données sur le site officiel de Realm. Mais quand je vais récupérer des valeurs de cette table, je reçois une exception
"io.realm.exceptions.RealmMigrationNeededException: RealmMigration doit être fourni" sur la ligne: "realm = Realm.getInstance (getApplicationContext ());".
En fait, je suis nouveau sur Android et Realm, donc j'ai du mal à comprendre quel est le problème.
EDIT: pour les nouvelles versions de Realm, Realm.init (Context context) est ajouté
Realm.init(context);
RealmConfiguration config = new RealmConfiguration
.Builder()
.deleteRealmIfMigrationNeeded()
.build();
REMARQUE: Avec cette option de configuration, toute modification de schéma entraînera perte de données , en particulier:
@Required
est ajouté/supprimé@PrimaryKey
est ajouté/supprimé@Index
est ajouté/suppriméIl est donc principalement recommandé lorsque l'application est en phase de développement.
Ou ajoutez une migration en suivant les documents officiels:
https://realm.io/docs/Java/latest/#migrations
Par exemple,
public class Migration implements RealmMigration {
@Override
public void migrate(final DynamicRealm realm, long oldVersion, long newVersion) {
RealmSchema schema = realm.getSchema();
if (oldVersion == 0) {
RealmObjectSchema personSchema = schema.get("Person");
personSchema
.addField("fullName", String.class, FieldAttribute.REQUIRED);
oldVersion++;
...
// hash code, equals
Et
Realm.init(context);
RealmConfiguration config = new RealmConfiguration.Builder()
.migration(new Migration())
// .deleteRealmIfMigrationNeeded()
.build();
si vous téléchargez l'application à stocker, la fonction "supprimer et réinstaller l'application" ne fonctionnera pas pour les autres utilisateurs, vous devez donc travailler avec "supprimer" le domaine et "réinstaller" le domaine, pas l'application. voici la façon de le faire, j'espère que ça vous aidera !!
RealmConfiguration realmConfiguration = new RealmConfiguration.Builder(this).build();
try {
return Realm.getInstance(realmConfiguration);
} catch (RealmMigrationNeededException e){
try {
Realm.deleteRealm(realmConfiguration);
//Realm file has been deleted.
return Realm.getInstance(realmConfiguration);
} catch (Exception ex){
throw ex;
//No Realm file to remove.
}
}
MODIFIER
Pour le dernier domaine (3.0.0), le domaine a modifié la structure du constructeur, vous devez donc faire quelque chose comme ceci:
Realm.init(context);
RealmConfiguration config = new RealmConfiguration
.Builder()
.deleteRealmIfMigrationNeeded()
.build();
Vous avez changé quelque chose pour la structure du royaume.
Pour le corriger, vous devez inclure migration ou simplement supprimer l'application et la réinstaller.
Ça marche pour moi
Realm.init(context);
Realm realm;
try{
realm = Realm.getDefaultInstance();
}catch (Exception e){
// Get a Realm instance for this thread
RealmConfiguration config = new RealmConfiguration.Builder()
.deleteRealmIfMigrationNeeded()
.build();
realm = Realm.getInstance(config);
}