RealmMigrationNeededException al cambiar el modelo de Realm
Cada vez que cambio el modelo como agregar más campos, la aplicación se bloquea con el error io.realm.exceptions.RealmMigrationNeededException. Esto solo se puede resolver cuando desinstale y vuelva a instalar la aplicación.
¿Alguna sugerencia para hacer la migración? Estoy usando sólo la instancia predeterminada.
- ¿Tengo que cerrar el dominio en una base por hilo, o por uso / clase-base?
- Cómo actualizar sólo valores NOT NULL al escribir datos en Realm
- Cómo crear un nuevo RealmObject que contiene una RealmList
- Error del compilador: com.sun.tools.javac.code.Symbol $ CompletionFailure: archivo de clase para rx.Observable no encontrado
- ¿Los campos de lectura de un objeto Realm son más lentos que los objetos java?
- Realm con datos pre-poblados en activos?
- Cómo establecer la marca de tiempo actual para cada inserción y actualizar la fila en el reino de Android
- Insertar imagen en la base de datos del reino en android
- Implementar un formulario de consulta de unión en un db de dominio sin tener una relación predefinida en struture
- Cómo cambiar una RealmList a RealmResult?
- Borrar la base de datos predeterminada de Android Realm
- No public RealmResults <E> Constructor?
- ¿Cómo instalar el reino como una dependencia gradle?
Debe poder encontrar la información que necesita aquí:
https://realm.io/docs/java/latest/#migrations
Simplemente cambiar el código a la nueva definición funcionará bien, si no tiene datos almacenados en el disco en el esquema de base de datos antiguo. Pero si lo hace, habrá un desajuste entre lo que el Reino ve definido en el código y los datos que el Reino ve en el disco, por lo que se lanzará una excepción.
Si no tienes ningún problema en perder tus datos antiguos, puedes eliminar la configuración del reino y crear uno nuevo.
Realm realm = null; try { realm = Realm.getInstance(MainActivity.this); } catch (RealmMigrationNeededException r) { Realm.deleteRealmFile(MainActivity.this); realm = Realm.getInstance(MainActivity.this); }
O
RealmConfiguration config2 = new RealmConfiguration.Builder(this) .name("default2") .schemaVersion(3) .deleteRealmIfMigrationNeeded() .build(); realm = Realm.getInstance(config2);
Usted tiene que hacer la Migration
si usted no quiere perder sus datos por favor vea este ejemplo aquí .
Realm migraciones en 0.84.2 se han cambiado un poco, los puntos clave en la creación de un reino (0.84.2) la migración de trabajo para mí fueron la comprensión de que:
-
La schemaVersion siempre es 0 cuando la aplicación tiene un db de dominio sin especificar schemaVersion. Lo que es cierto en la mayoría de los casos, ya que probablemente empiece a usar schemaVersion en la configuración una vez que necesite migraciones y ya está ejecutando una versión en vivo de su aplicación.
-
La schemaVersion se almacena automáticamente y cuando se produce una nueva instalación de su aplicación y ya está en schemaVersion 3, el reino verifica automáticamente si hay excepciones, si no, establece la schemaVersion en 3 para que sus migraciones no se ejecuten cuando no se necesitan. Esto también meens usted no tiene que almacenar nada más en SharedPreferences.
-
En la migración usted tiene que fijar todos los valores de nuevas columnas cuando el tipo no es anulable, …
-
Las cadenas vacías se pueden insertar pero sólo cuando se establece convertColumnToNullable en la columna
- No se puede construir el proyecto cordova con éxito al ejecutar el comando debug de hormigas
- Cómo dibujar un mapa de bits con transparencia