2016-04-28 11 views
5

ho usato nel mio regno fino Android ora con new RealmConfiguration.Builder(this) .build();Aprire regno con il nuovo realmconfiguration

Ho appena letto tardi circa la possibilità di aggiungere lo schema e la migrazione. Quindi nella mia nuova versione per la mia app voglio aggiungere la funzione di migrazione. così ho cambiato la linea di cui sopra a:

new RealmConfiguration.Builder(this) .schemaVersion(0) .migration(new Migration()) .build(); 

ma ora ottengo l'errore

IllegalArgumentException: Configurations cannot be different if used to open the same file.  

come posso modificare la configurazione senza eliminare il database

risposta

17

Penso che il tuo problema è che stai creando la tua RealmConfiguration più volte. Questo non dovrebbe essere un problema di per sé (anche se è inefficiente), ma il problema si pone con la tua classe Migration. Confrontiamo internamente tutti gli stati negli oggetti di configurazione e, se non hai sovrascritto equals e hashCode nella tua classe Migration, hai un caso in cui lo new Migration().equals(new Migration()) == false ti darà l'errore che stai vedendo.

Una soluzione è l'aggiunta di questo:

public class Migration implements RealmMigration { 

    // Migration logic... 

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

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

Questo ha risolto il mio problema. Ci ho messo un po 'a capire che era il mio vero problema. Ora limito la creazione di RealmConfiguration come raccomandato. ma devo usarlo più di una volta perché uso il regno in più thread. –

+0

Salvarlo in una variabile statica nella classe dell'applicazione o salvarlo come configurazione predefinita. Entrambi dovrebbero funzionare come metodi per accedere facilmente ad esso. –

+0

funziona, ma non ha senso. – Pierry

0

Quando si imposta una nuova versione dello schema con schemaVersion(), il numero di versione deve essere uguale o superiore alla versione dello schema del file di autenticazione esistente. Il RealmMigration() fornito dovrebbe quindi essere in grado di convertire la versione precedente degli schemi nella nuova versione.

Suggerisco di controllare prima la versione dello schema esistente, quindi controllare i tuoi RealmObject s per la conversione approprea.

+0

Il problema sembra essere che quando ho creato il regno la prima volta non ho aggiunto lo schema a tutti. Guarda il mio post su come l'ho creato. –