Yo estoy usando el Reino como un back-end en mi aplicación. He creado una tabla con el nombre de Configuración. He añadido los valores de la tabla, siguiendo los pasos dados en el Reino del sitio oficial.
Pero cuando voy a recuperar los valores de la tabla en, I guía de excepción

«io.reino.excepciones.RealmMigrationNeededException: RealmMigration debe ser proporcionada» en la línea de:» realm=Reino.getInstance(getApplicationContext());».

Realidad, soy nuevo en android y el Reino, por lo que encontrar problemas para entender lo que es el problema.

5 Comentarios

  1. 74

    EDIT: para las versiones nuevas del Reino, un Reino.init(Context context) es añadido

    Realm.init(context);    
    RealmConfiguration config = new RealmConfiguration
                                         .Builder()
                                         .deleteRealmIfMigrationNeeded()
                                         .build();

    NOTA: Con esta opción de configuración, cualquier esquema se producirá un cambio en pérdida de datos, específicamente:

    • un campo se agrega/quita
    • un nuevo RealmObject clase se agrega
    • existente RealmObject se quita
    • @Required se agrega/quita
    • @PrimaryKey se agrega/quita
    • @Index se agrega/quita

    Así que se recomienda principalmente mientras la aplicación se está en la etapa de desarrollo.


    O agregar una migración siguiente el oficial docs:

    https://realm.io/docs/java/latest/#migrations

    Por ejemplo,

    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 

    Y

    Realm.init(context);    
    RealmConfiguration config = new RealmConfiguration.Builder() 
                                     .migration(new Migration()) 
                               //     .deleteRealmIfMigrationNeeded()
                                     .build();
    • RealmConfiguration config = new RealmConfiguration.Builder(context).deleteRealmIfMigrationNeeded().build() en mi reino de la versión 2.0.0. Builder(Context context) no es público
    • Si usted se está preguntando cómo utilizar «config», intente esto: el reino.getInstance(config);
    • o simplemente Realm.setDefaultConfiguration(config) y así sucesivamente.
    • Si todavía no funciona, intente volver a instalar la aplicación. Trabajó para mí
    • si tenemos dos DBs para el acceso en la misma app, entonces, ¿cómo puede uno setDefaultConfig, no el reino siempre use sólo el defaultconfig archivo?. Por favor explique. Estoy teniendo diffculty en la comprensión del concepto, si tengo más de un DBs a utilizar.
    • si usted tiene dos configuraciones, entonces usted debe utilizar el name("otherRealm.realm") argumento de RealmConfiguration.Builder. Usted PUEDE tener un setDefaultConfig, acaba de ser conscientes de lo que están haciendo y cuando usted está utilizando la configuración con Realm.getInstance(otherRealmConfig).
    • Yo tengo ahora. Así que ahora tengo dos DBs en diferentes esquemas (archivos), cuando quiero acceder a ellos estoy frente a errores de MIGRACIÓN. Después de googlear, he entendido que tengo que añadir uno de los esquemas (un archivo de datos) a otros y, a continuación, puedo acceder al archivo de tener tanto la DBs. Pero no estoy seguro exactamente cómo hacerlo. Tal vez usted tiene alguna enlaces, etc.. estoy siguientes este por ahora.

  2. 19

    si carga la app store, la de «eliminar y volver a instalar la app» no va a trabajar a otro usuario, por lo que debe trabajar con «eliminar» el reino y la «reinstalación» el reino, no la aplicación. aquí está la manera de hacerlo, espero que te ayude!!

        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.
            }
        }

    EDITAR

    Para el nuevo Reino (3.0.0), Reino haya cambios en el constructor de la estructura, por lo que debe de hacer algo como esto :

    Realm.init(context);    
    RealmConfiguration config = new RealmConfiguration
                                         .Builder()
                                         .deleteRealmIfMigrationNeeded()
                                         .build();
    • En realidad RealmMigration es la mejor respuesta para su problema, pero de alguna manera yo no puedo implementar RealmMigration a mis aplicaciones :s
    • Gracias amigo esta perfectamente ayuda en la solución de problema
  3. 13

    Cambió algo para el reino de la estructura.

    Para solucionarlo se debe incluir la la migración
    o simplemente eliminar la aplicación y volver a instalarla.

    • Yupp, funcionó, he vuelto a instalar la aplicación… muchas Gracias amigo
    • En caso de que seas nuevo, puede marcar esta respuesta como ‘trabajo’ por ‘aceptar’ se. (En la izquierda una ‘v’ marca)
    • Una cosa más que quiero preguntar es, como ahora he recuperado los valores en «RealmResults<Lista>». He atributos en la tabla como «id,nombre, valores». ¿Cómo puedo obtener el valor de los «valores» de la columna por separado..»???
    • sólo se puede obtener el conjunto de objetos, de modo que usted puede hacer un FindAll() y loop a través de la .getValues() parte
    • En realidad no muestra la opción de getValues(), pero me hizo get(i); pero es proporcionar toda la fila y quiero único valor de la fila. Mi código es «settingDataList.get(0);»
    • Usted podría hacer de una manera diferente, los Datos datos = reino.donde(data.class).equalTo(«valores»,»mi querido valor»).findFirst (), que devuelve un objeto único de Datos y, a continuación, se puede hacer algo con los datos.
    • Básicamente, la única manera de obtener un único valor es conseguir que toda la fila como objeto en primer lugar y, a continuación, utilizar la función de captador para recuperar la quería valor.
    • Yo lo hice.. Gracias.
    • Por ejemplo, he cambiado la versión de Reino y tengo este error. Acaba de volver a instalarlo.

  4. 5

    Que me funciona

        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);
    
        }
  5. -1

    Kotlin versión:

    val realm = try {
                Realm.init(this)
                val config = RealmConfiguration.Builder()
                        .deleteRealmIfMigrationNeeded()
                        .build()
                Realm.getInstance(config)
            } catch (ex: RealmMigrationNeededException) {
                Realm.getDefaultInstance()
            }

Dejar respuesta

Please enter your comment!
Please enter your name here