es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Error de Hive: Este objeto no se encuentra actualmente en una caja. Al intentar guardar un objeto de colmena en una lista en otro objeto de colmena.

Estoy trabajando en una aplicación con flutter y una base de datos no sql local llamada Hive.

Creé un objeto Hive que contiene una lista de otro objeto Hive.

Este es el primer objeto:

@HiveType(typeId: 0)
class FirstObject extends HiveObject {
  @HiveField(0)
  late String string;

  @HiveField(1)
  late DateTime dateTime;

  @HiveField(2)
  late List<secondobject> secondObject = [];
}

Este es el segundo objeto:

@HiveType(typeId: 1)
class SecondObject extends HiveObject {
  @HiveField(0)
  late String something;

  @HiveField(1)
  bool boolean = false;

  @HiveField(2)
  late DateTime? date;
}

Generé adaptadores para ambos objetos y los registré, pero solo generé una caja para el primer objeto que contiene el segundo objeto.

Luego creé una variable de lista que representa la lista en el primer objeto y construí un constructor ListView que tiene listas con una casilla de verificación que actualiza el booleano en el segundo objeto y luego lo guarda.

Pero cuando lo probé, me dio un error que decía:

The following HiveError was thrown while handling a gesture:
This object is currently not in a box.

Probé algunas soluciones como crear otra caja para el segundo objeto y declarar una variable en el segundo objeto que contenga el primer objeto al que pertenece. Pero esas soluciones me dieron otros errores.

¿Cuál es la mejor solución para este problema?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    El mensaje de error “Este objeto no se encuentra actualmente en una caja” sugiere que el segundo objeto no está asociado con ninguna caja de Hive. La mejor solución a este problema es crear una caja de Hive separada para el segundo objeto y asociarla con el adaptador del segundo objeto.

    Para implementar esta solución, necesitarías crear una nueva caja de Hive utilizando el siguiente código:

    final secondObjectBox = await Hive.openBox('secondObjectBox');

    A continuación, necesitarías registrar el adaptador del segundo objeto con la nueva caja:

    Hive.registerAdapter(SecondObjectAdapter(), 1);

    Actualiza el primer objeto para que use la nueva caja y el adaptador para el segundo objeto:

    @HiveType(typeId: 0)
    class FirstObject extends HiveObject {
      @HiveField(0)
      late String string;
    
      @HiveField(1)
      late DateTime dateTime;
    
      @HiveField(2)
      List<secondobject> secondObject = [];
    }
    

    Cuando actualices la casilla y la guardes, debes guardarla en la caja del segundo objeto:

    await secondObjectBox.put(secondObject.key, secondObject);

    Estos pasos garantizarán que el segundo objeto esté correctamente asociado con su propia caja y su adaptador, y evitarán que aparezca el mensaje de error.

Comments are closed.