2016-04-28 8 views
5

użyłem w moim android Realm Do tej pory z new RealmConfiguration.Builder(this) .build();Otwarte sfera z nowym realmconfiguration

Właśnie przeczytałem później o możliwości dodawania schematu i migracji. Tak więc w mojej nowej wersji dla mojej aplikacji chcę dodać funkcję migracji. więc zmieniłem linię wyżej:

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

ale teraz pojawia się błąd

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

Jak mogę zmienić konfigurację bez usuwania bazy

Odpowiedz

17

Myślę, że twój problem polega na tym, że kilka razy tworzysz RealmConfiguration. Nie powinno to stanowić problemu samo w sobie (chociaż jest to nieefektywne), ale problem pojawia się w przypadku klasy Migration. Wewnętrznie porównujemy wszystkie stany w obiektach konfiguracyjnych i jeśli nie zastąpiłeś equals i hashCode w klasie Migration, masz przypadek, w którym new Migration().equals(new Migration()) == false da ci błąd, który widzisz.

Jednym z rozwiązań jest dodanie tego:

public class Migration implements RealmMigration { 

    // Migration logic... 

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

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

To rozwiązało mój problem. Zajęło mi trochę czasu, aby zrozumieć, że to był mój właściwie mój problem. Ograniczam teraz tworzenie RealmConfiguration zgodnie z zaleceniami. ale muszę użyć go więcej niż raz, ponieważ używam sfery w wielu wątkach. –

+0

Zapisywanie go w zmiennej statycznej w klasie aplikacji lub zapisanie jako domyślnej konfiguracji powinno działać jako sposób na łatwy dostęp do niej. –

+0

to działa, ale nie ma sensu. – Pierry

0

Gdy ustawisz nową wersję schematu z numerem schemaVersion(), numer wersji powinien być równy lub wyższy niż wersja istniejącego pliku dziedziny. Dostarczone przez ciebie RealmMigration() powinno być wtedy w stanie przekonwertować starszą wersję schematów na nową.

Proponuję najpierw sprawdzić istniejącą wersję schematu, a następnie sprawdzić poprawność konwersji na RealmObject.

+0

Problem wydaje się być to, że kiedy stworzył sferę po raz pierwszy i nie dodawać w ogóle schematu. Zobacz mój post na temat tego, jak go stworzyłem. –